**这个用户指导分为两部分,首先是OAuth 2.0 服务端,其次OAuth 2.0 客户端。以及提供了最好的 integration tests 和 sample 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”)
- Resource Server 被授权访问的资源服务
- Authotization Server OAuth认证服务器
- Resource Owner 资源拥有者
- Client 客户端程序(Android、IOS、Web App)
Authotization Code
用在服务端应用之间的认证方式Implicit
用在与移动端或Web端的认证方式Resource Owner Password Credentials
应用直接都是受信任的(都是由一家公司开发的,本例子使用)Client Credentials
用在基于注册中心下的微服务应用API之间的访问。
AuthorizationEndpoint
用于服务授权请求,Default URL:/oauth/authorize
TokenEndpoint
被用于获取请求服务的 access token , Default URL:/oauth/token
OAuth2AuthenticationProcessingFilter
被用于为请求加载 认证 被认可的 access token,核心token过滤器
-
@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
- injecting an
- 客户端模式(client credentials)(
主要用于api认证,跟用户无关
)
- 授权码模式
-
authorities
权利
-
-
AuthorizationServerSecurityConfigurer
定义了令牌端点上的安全限制 -
AuthorizationServerEndpointsConfigurer
定义了授权和令牌以及令牌服务
-
InMemoryTokenStore
JdbcTokenStore
JwtTokenStore
- need "spring-security-jwt"
- URL:
/oauth/token_key
- 依赖
JwtAccessTokenConverter
- expression into the
AuthorizationServerSecurityConfigurer
(e.g. "permitAll()")
-
@EnableResourceServer
开启资源服务器ResourceServerConfigurer
tokenServices
resourceId
tokenExtractor
HttpSecurity
OAuth2AuthenticationProcessingFilter
资源服务核心过滤器,作用于 Spring Security filter chain/oauth/check_token
/oauth/token_key
@EnableOAuth2Client
OAuth2ProtectedResourceDetails
保护资源id
clientId
clientSecret
accessTokenUri
scope
clientAuthenticationScheme
-
userAuthorizationUri