Skip to content

Latest commit

 

History

History
128 lines (77 loc) · 4.6 KB

21.1 OAuth2 认证.md

File metadata and controls

128 lines (77 loc) · 4.6 KB

OAuth 2.0

介绍

**这个用户指导分为两部分,首先是OAuth 2.0 服务端,其次OAuth 2.0 客户端。以及提供了最好的 integration testssample apps. **

  • User access is configured using “roles” and RBAC
  • Machines access is configured using “scopes” and RBAC
  • Complex access configuration is expressed using ABAC, using boolean expressions over both “roles” and “scopes”
    • example: hasRole(“ADMIN”) and hasScope(“shop-manager.read”, “shop-manager.write”)

内部服务安全问题

OAuth Roles:

  • Resource Server 被授权访问的资源服务
  • Authotization Server OAuth认证服务器
  • Resource Owner 资源拥有者
  • Client 客户端程序(Android、IOS、Web App)

Grant Type:

  • Authotization Code 用在服务端应用之间的认证方式
  • Implicit 用在与移动端或Web端的认证方式
  • Resource Owner Password Credentials 应用直接都是受信任的(都是由一家公司开发的,本例子使用)
  • Client Credentials 用在基于注册中心下的微服务应用API之间的访问。

Spring Security OAuth2 Configuration

1. OAuth Authorization Server

1.1 Configuration

  • @EnableAuthorizationServer 开启认证服务

  • AuthorizationServerConfigurer 认证服务配置器

    • ClientDetailsServiceConfigurer 定义客户端详细服务配置,初始化客户端

      • clientId 客户端唯一标识

      • secret 客户端的秘钥

      • scope 作用域,如果 undefined or empty (the default) 不限制

      • authorizedGrantTypes 授予客户端授权使用的类型

        support by AuthorizationEndpoint

        configured AuthorizationServerEndpointsConfigurer

        • 授权码模式 authorization code
        • 简化模式(implicit)(client为浏览器/前端应用)
        • 密码模式(resource owner password credentials)(用户密码暴露给client端,内部可信网络情况使用)
          • injecting an authenticationManager
        • 客户端模式(client credentials)(主要用于api认证,跟用户无关)
      • authorities 权利

    • AuthorizationServerSecurityConfigurer 定义了令牌端点上的安全限制

    • AuthorizationServerEndpointsConfigurer 定义了授权和令牌以及令牌服务

1.2 Token 管理

  • InMemoryTokenStore
  • JdbcTokenStore
  • JwtTokenStore
    • need "spring-security-jwt"
    • URL:/oauth/token_key
    • 依赖 JwtAccessTokenConverter
    • expression into the AuthorizationServerSecurityConfigurer (e.g. "permitAll()")

1.3 资源服务器配置

  • @EnableResourceServer 开启资源服务器
  • ResourceServerConfigurer
    • tokenServices
    • resourceId
    • tokenExtractor
    • HttpSecurity
  • OAuth2AuthenticationProcessingFilter 资源服务核心过滤器,作用于 Spring Security filter chain
    • /oauth/check_token
    • /oauth/token_key

2. OAuth 2.0 Client

2.1 资源保护配置

  • @EnableOAuth2Client
  • OAuth2ProtectedResourceDetails 保护资源
    • id
    • clientId
    • clientSecret
    • accessTokenUri
    • scope
    • clientAuthenticationScheme
    • userAuthorizationUri

Accessing Protected Resources

Persisting Tokens in a Client

Customizations for Clients of External OAuth2 Providers