使用OAuth2在spring security中进行用户授权

时间:2014-12-30 15:18:00

标签: java spring spring-security oauth-2.0

我目前正在使用spring-security和spring boot调查OAuth2。虽然这个协议的概念对我来说非常清楚,但实现细节却不是(spring没有提供很多示例和教程来使用)。因此,我将非常感谢回答以下问题:

  1. "密码"的目的是什么?授予类型? OAuth2规范并没有提及它。它只是Spring实现某种"授权快捷方式"?
  2. 资源服务器如何处理访问令牌(检查它是否仍然有效,范围等)?我是否需要实现某些功能,或者由Spring Security和ResourceServerConfig提供?
  3. RS如何知道哪个用户(非客户端)请求了资源?特定的用户资源与id,唯一的用户名等绑定,令牌有这种信息吗?如何检索它以便在资源控制器中使用?
  4. 授权服务器(如果我错了,请更正我)能够检查客户端应用程序是否具有请求资源的权限。据我所知,它不应该知道用户(资源所有者)。在我通过谷歌进行身份验证的情况下,Facebook或其他一些服务用户身份验证就是他们的情况。那么OAuth2和Resources Server是一个应用程序的应用程序(我目前正在开发用于测试目的的应用程序),我应该放置UserDetailsS​​ervice?如何组合它以便首先授权客户端(在这种情况下从应用程序生成的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)的授权流程支持(据我所知)众所周知的服务?

  6. 任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

这是很多问题;让我先回答3:

  1. 值为grant_type的{​​{1}}是资源所有者密码凭据授权类型的官方保留值,如此处的规范所示:https://tools.ietf.org/html/rfc6749#section-4.3.2所以它不是Spring具体或定制

  2. RS可以验证令牌本身,如果它是自包含和结构化的(例如JWT),或者它需要回拨给授权服务器以验证它

  3. 步骤2的验证结果可能包含有关授予客户访问权限的用户(或:资源所有者)的信息