java - 使用 OAuth2 在 Spring Security 中进行用户授权

标签 java spring spring-security oauth-2.0

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

  1. “密码”授予类型的目的是什么? OAuth2 规范没有提到这一点。这只是 Spring 实现的某种“授权快捷方式”吗?
  2. 资源服务器如何处理访问 token (检查它是否仍然有效、范围等)?我是否需要实现一些东西,或者它是由 Spring Security 和 ResourceServerConfig 提供的?
  3. RS 如何知道哪个用户(不是客户端)请求了资源?具体的用户资源是与id、唯一用户名等绑定(bind)的,token有这类信息吗?如何检索它以便在资源 Controller 中使用?
  4. 授权服务器(如果我错了请纠正我)能够检查客户端应用程序是否有权访问所请求的资源。据我了解,它不应该知道用户(资源所有者)。在我通过 Google、Facebook 或其他一些服务进行身份验证的情况下,用户身份验证就是他们的情况。如果 OAuth2 和资源服务器是一个应用程序(我目前正在开发这样一个用于测试目的)的应用程序,我应该将 UserDetailsS​​ervice 放在哪里?如何组合它以便首先授权客户端(在本例中是从应用程序生成的js),然后是用户(资源所有者)并生成 token ?目前我已经实现了 ClientDetailService 并注入(inject)到配置中。我应该在哪里注入(inject)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?

如有任何帮助,我们将不胜感激:)

最佳答案

有很多问题;让我首先回答 3:

  1. 值为 passwordgrant_type 是资源所有者密码凭证授予类型的官方保留值,如此处规范所示:https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2所以它不是 Spring 特定的或自定义的

  2. 如果 token 是独立且结构化的(例如 JWT),RS 可以验证 token 本身,否则它将需要回调授权服务器来验证它

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

关于java - 使用 OAuth2 在 Spring Security 中进行用户授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707971/

相关文章:

java - Jersey:未拾取 PerRequestTypeInjectableProvider

java - Spring 事务上下文包装?

java - Spring Security访问被拒绝角色或还有什么?

java - 在 Messenger 上共享音频

java - Eclipse、Java、Junit4,我想对 jar 文件进行黑盒测试。设置时需要一些帮助

spring-security - Spring Security 登录/注销的日志记录

java - Spring 安全 SAML OpenAM

grails - 如何在 Grails 中通过过滤器查询所有用户的 LDAP?

java - GWT 代码拆分和 PhoneGap

java - 出现错误 "No converter found capable of converting from type java.lang.String to type org.springframework.security.core.GrantedAuthority"