Комбинация клиента Spring Oauth2 и учетных данных пользователя

Я разрабатываю приложение, защищенное с помощью Spring Oauth2, password потока.

Но я все еще не понимаю разницы между потоками UserDetailService и ClientDetailsService в Spring.

Насколько я понимаю из спецификации OAuth2, клиент и пользователь — разные сущности. Клиент имеет clientId, clientSecret и немного grants, а Пользователь имеет username, password, а также немного grants.

Несколько пользователей используют один и тот же клиент (мобильное приложение или веб-браузер в моем случае).

Поэтому мне нужно аутентифицировать пользователя и предоставить ему токен доступа.

Я реализовал как UserDetailsService, так и ClientDetailsService (со всей необходимой инфраструктурой: AuthorizationServerConfigurerAdapter и ResourceServerConfigurerAdapter), и во время аутентификации я вижу, что имя пользователя из запроса передается как clientId в clientDetailsService и как username в userDetailsService.

Но я подумал, что это должен быть более сложный процесс, например, для запроса аутентификации клиент должен предоставить как учетные данные клиента, так и учетные данные пользователя, чтобы затем я мог проверить клиента (зарегистрирован ли он в моей системе) и его гранты, затем проверить пользователя и его гранты, а затем вернуть доступ токен.

Мои вопросы:

  1. Я правильно понимаю процесс?
  2. Имеют ли гранты клиента и пользовательские гранты одно и то же значение?
  3. Какие классы следует настроить для отдельной проверки учетных данных клиента и пользователя?

person Covain    schedule 05.04.2018    source источник


Ответы (1)


Решение до глупости простое.

Клиент и пользователь на самом деле разные сущности. Чтобы получить токен доступа, вам необходимо выполнить базовую аутентификацию с Base64 encoded client credentials в заголовке и username/password of the user in params.

Псевдокод заголовка:

Basic Base64("client_id:client_secret")

Параметры:

username=username, password=password, grant_type=password

Это вернет вам access_token, refresh_token и некоторую дополнительную информацию.

person Covain    schedule 08.04.2018