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

Java 使用OAuth2在spring security中进行用户授权,java,spring,spring-security,oauth-2.0,Java,Spring,Spring Security,Oauth 2.0,我目前正在使用spring security和spring boot调查OAuth2。虽然这个协议的概念对我来说很清楚,但实现细节却不清楚(spring没有提供很多示例和教程)。因此,我非常感谢您回答我的以下问题: “密码”授权类型的用途是什么?OAuth2规范没有提到它。它只是某种“授权快捷方式”的Spring实现吗 资源服务器如何处理访问令牌(检查它是否仍然有效,范围等)?我是否需要实现一些东西,或者它是由Spring Security和ResourceServerConfig提供的 RS如

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

  • “密码”授权类型的用途是什么?OAuth2规范没有提到它。它只是某种“授权快捷方式”的Spring实现吗
  • 资源服务器如何处理访问令牌(检查它是否仍然有效,范围等)?我是否需要实现一些东西,或者它是由Spring Security和ResourceServerConfig提供的
  • RS如何知道哪个用户(不是客户端)请求了资源?特定用户资源与ID、唯一用户名等绑定,令牌是否具有此类信息?如何检索它以便在资源控制器中使用
  • 授权服务器(如果我错了请纠正我)能够检查客户端应用程序是否具有请求资源的权限。据我所知,它不应该知道用户(资源所有者)。在我通过谷歌、Facebook或其他服务进行身份验证的情况下,用户身份验证就是他们的情况。如果OAuth2和Resources Server是一个应用程序(我目前正在为测试目的开发这样一个应用程序),那么我应该将UserDetailsService放在哪里呢?以及如何组合它,以便首先授权客户端(本例中是从应用程序生成的js),然后授权用户(资源所有者)并生成令牌?目前我已经实现了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,它支持(据我所知)众所周知的服务


  • 任何帮助都将不胜感激:)

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

  • 值为
    password
    grant\u类型是资源所有者密码凭据授予类型的官方保留值,如这里的规范所示:因此它不是特定于Spring的或自定义的

  • 如果令牌是自包含和结构化的(例如JWT),RS可以验证令牌本身,否则需要回调授权服务器以验证令牌

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


  • 你说得对。我的误解是因为RFC明确指出密码授权类型的请求应该包括授权类型、密码、用户名和范围(可选)。但在一些文章和视频教程中,我发现对于这种补助类型,它们还提供AS可能需要的客户端id(仔细阅读RFC:)。这稍微澄清了一点问题。用户凭据身份验证呢?在我的案例中应该在哪里实施?