Я разрабатываю приложение, защищенное с помощью Spring Oauth2, password
потока.
Но я все еще не понимаю разницы между потоками UserDetailService и ClientDetailsService в Spring.
Насколько я понимаю из спецификации OAuth2, клиент и пользователь — разные сущности. Клиент имеет clientId
, clientSecret
и немного grants
, а Пользователь имеет username
, password
, а также немного grants
.
Несколько пользователей используют один и тот же клиент (мобильное приложение или веб-браузер в моем случае).
Поэтому мне нужно аутентифицировать пользователя и предоставить ему токен доступа.
Я реализовал как UserDetailsService
, так и ClientDetailsService
(со всей необходимой инфраструктурой: AuthorizationServerConfigurerAdapter и ResourceServerConfigurerAdapter), и во время аутентификации я вижу, что имя пользователя из запроса передается как clientId
в clientDetailsService и как username
в userDetailsService.
Но я подумал, что это должен быть более сложный процесс, например, для запроса аутентификации клиент должен предоставить как учетные данные клиента, так и учетные данные пользователя, чтобы затем я мог проверить клиента (зарегистрирован ли он в моей системе) и его гранты, затем проверить пользователя и его гранты, а затем вернуть доступ токен.
Мои вопросы:
- Я правильно понимаю процесс?
- Имеют ли гранты клиента и пользовательские гранты одно и то же значение?
- Какие классы следует настроить для отдельной проверки учетных данных клиента и пользователя?