2014-12-30 3 views
1

В настоящее время я изучаю OAuth2 с весной и весной. Хотя концепция этого протокола совершенно ясна, детали реализации не являются (весна не содержит много примеров и руководств для работы). В связи с этим я был бы очень благодарен за ответы на мои вопросы ниже:Авторизация пользователя в весенней безопасности с использованием OAuth2

  1. Что такое назначение типа «пароль»? Спецификации OAuth2 не упоминают об этом. Это просто реализация Spring какого-то «ярлыка авторизации»?
  2. Как сервер ресурсов обрабатывает токены доступа (проверьте, действительно ли он действителен, область действия и т. Д.)? Нужно ли мне что-то реализовать, или оно обеспечивается Spring Security и ResourceServerConfig?
  3. Как RS узнает, какой пользователь (а не клиент) запросил ресурсы? Конкретные пользовательские ресурсы связаны с идентификаторами, уникальными именами пользователей и т. Д., Имеет ли токен такую ​​информацию? Как его получить, чтобы использовать в контроллерах ресурсов?
  4. Сервер авторизации (исправьте меня, если я ошибаюсь) может проверить, имеет ли клиентское приложение разрешение на запрашиваемые ресурсы или нет. Насколько я понимаю, он не должен знать пользователей (владельцев ресурсов). В ситуации, когда я выполняю аутентификацию через 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); 
    } 
    } 
    
  5. Есть некоторые библиотеки JS, которые помогают с потоком авторизации для пользовательских приложений, таких как hello.js, который поддерживает (насколько я в курсе), хорошо известные услуги?

Любая помощь будет оценена :)

ответ

0

Это много вопросов; позвольте мне начать с ответа 3:

  1. grant_type со значением password является официальным зарезервирован значение для ресурса Владелец Пароль Полномочия типа грант, как показано в спецификации здесь: https://tools.ietf.org/html/rfc6749#section-4.3.2 поэтому не Spring конкретных или пользовательских

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

  3. результата проверки со стадии 2. может включать ude информация о пользователе (или: Владелец ресурса), который предоставил доступ клиенту

+0

Вы правы. Мое недоразумение было вызвано тем фактом, что RFC явно говорит о том, что запрос на тип предоставления пароля должен включать grant_type, пароль, имя пользователя и область действия (необязательно). Но в некоторых статьях и видеоуроках я обнаружил, что для этого типа гранта они также предоставляют client_id, который может потребоваться AS (после более подробного ознакомления с RFC :)). Это немного разъясняет проблему. Как насчет аутентификации учетных данных пользователя? Где это должно быть реализовано в моем случае? –

Смежные вопросы