В настоящее время я изучаю OAuth2 с весной и весной. Хотя концепция этого протокола совершенно ясна, детали реализации не являются (весна не содержит много примеров и руководств для работы). В связи с этим я был бы очень благодарен за ответы на мои вопросы ниже:Авторизация пользователя в весенней безопасности с использованием OAuth2
- Что такое назначение типа «пароль»? Спецификации OAuth2 не упоминают об этом. Это просто реализация Spring какого-то «ярлыка авторизации»?
- Как сервер ресурсов обрабатывает токены доступа (проверьте, действительно ли он действителен, область действия и т. Д.)? Нужно ли мне что-то реализовать, или оно обеспечивается Spring Security и ResourceServerConfig?
- Как RS узнает, какой пользователь (а не клиент) запросил ресурсы? Конкретные пользовательские ресурсы связаны с идентификаторами, уникальными именами пользователей и т. Д., Имеет ли токен такую информацию? Как его получить, чтобы использовать в контроллерах ресурсов?
Сервер авторизации (исправьте меня, если я ошибаюсь) может проверить, имеет ли клиентское приложение разрешение на запрашиваемые ресурсы или нет. Насколько я понимаю, он не должен знать пользователей (владельцев ресурсов). В ситуации, когда я выполняю аутентификацию через Google, Facebook или другую аутентификацию пользователей службы - это их дело. Что касается приложения, в котором OAuth2 и Resource Server являются одним из приложений (в настоящее время я разрабатываю такой вариант для тестирования), где я должен помещать UserDetailsService? И как объединить его для авторизации клиента (js, сгенерированного из приложения в этом случае) сначала, затем пользователя (владельца ресурса) и создания токена? Currenly я внедрил ClientDetailService и ввел его в конфигурацию. Где я должен вводить UserDetailService?
@Configuration @EnableAuthorizationServer public class OAuth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private MongoClientDetailsService cds; @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.withClientDetails(cds); } }
Есть некоторые библиотеки JS, которые помогают с потоком авторизации для пользовательских приложений, таких как hello.js, который поддерживает (насколько я в курсе), хорошо известные услуги?
Любая помощь будет оценена :)
Вы правы. Мое недоразумение было вызвано тем фактом, что RFC явно говорит о том, что запрос на тип предоставления пароля должен включать grant_type, пароль, имя пользователя и область действия (необязательно). Но в некоторых статьях и видеоуроках я обнаружил, что для этого типа гранта они также предоставляют client_id, который может потребоваться AS (после более подробного ознакомления с RFC :)). Это немного разъясняет проблему. Как насчет аутентификации учетных данных пользователя? Где это должно быть реализовано в моем случае? –