Skip to main content

Spring Security OAuth2

Tips

curl acme:acmesecret@localhost:8080/oauth/token -d grant_type=client_credentials
curl acme:acmesecret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=...

http://localhost:8080/oauth/authorize?response_type=code&client_id=cli&scope=read&state=yes&redirect_uri=http://localhost:8080/cb
http://localhost:8080/oauth/authorize?response_type=token&client_id=cli&scope=read&state=yes&redirect_uri=http://localhost:8080/cb

Notes

  • OAuth2

    • @EnableAuthorizationServer / AS / 授权服务
      • AuthorizationServerEndpointsConfiguration
      • AuthorizationServerSecurityConfiguration
        • ClientDetailsServiceConfiguration
          • ClientDetailsServiceConfigurer
        • AuthorizationServerConfigurer
        • AuthorizationServerSecurityConfigurer
    • @EnableOAuth2Client / Client / 客户端
      • 主要用于简化发起 OAuth2 的请求
    • @EnableResourceServer / RS / 资源服务
      • ResourceServerConfiguration
        • ResourceServerConfigurer
  • DefaultTokenServices

    • 实现了核心的几个接口 AuthorizationServerTokenServices, ResourceServerTokenServices, ConsumerTokenServices
    • Token 存储交由 TokenStore
  • AuthorizationServerEndpointsConfigurer

    • 核心配置对象, 所有的相关接口和配置
  • AuthorizationServerConfigurer

    • OAUth2 Authorization Server 配置接口
  • ApprovalStore

    • 存储用户批准的信息
    • 每个用户,每个客户端
  • OAuth2RequestFactory

    • 管理 OAuth2 请求
  • ClientDetails

    • OAuth2 的客户端信息
    • ClientDetailsService
      • 获取客户端信息
    • ClientRegistrationService
      • 添加修改和删除客户端信息
  • OAuth2SecurityExpressionMethods

    • 表达式中的 oauth2 方法
  • OAuth2AccessToken

    • TokenEnhancer
      • 对 Token 对象进行增强
      • 例如实现 JWT 添加自定义 Claims
      • TokenEnhancerChain 实现一组增强
    • TokenStore
      • 存储 OAuth2 Token
    • ConsumerTokenServices
      • 用于回收 Token
    • TokenGranter
      • 对应 OAuth2 中的不同授权类型
      • AuthorizationCodeServices
        • 生成和存储 authorization_code
      • 账号密码的授权会使用 Spring Security 中的 AuthenticationManager 来判断是否授权成功
  • TokenGranter

    • 生成不同类型的 Token
    • ImplicitTokenGranter
      • implicit
    • RefreshTokenGranter
      • refresh_token
    • AuthorizationCodeTokenGranter
      • authorization_code
    • ResourceOwnerPasswordTokenGranter
      • password
    • ClientCredentialsTokenGranter
      • client_credentials

AuthorizationEndpoint /oauth2/authorize

AuthorizationEndpoint /oauth2/token

/oauth/confirm_access /oauth/error