Spring Cloud与OAuth2整合
OAuth2中的角色
- client 调用资源服务器API的应用
- Authorization Server 认证授权服务器
- Resource Server 受保护的资源服务器
- user 资源拥有者用户
Authorization Server
开启@EnableAuthorizationServer注解,该注解会自动添加OAuth2的多个endpoint。
- /oauth/authorize:验证接口, AuthorizationEndpoint
- /oauth/token:获取token
- /oauth/confirm_access:用户授权
- /oauth/error:认证失败
- /oauth/check_token:资源服务器用来校验token
- /oauth/token_key:jwt模式下获取公钥;位于:TokenKeyEndpoint ,通过 JwtAccessTokenConverter 访问key
继承AuthorizationServerConfigurerAdapter,配置OAuth2认证服务器,需要配置授权和Token相关的三个配置。
- AuthorizationServerSecurityConfigurer:声明安全约束,允许那些请求可以访问和禁止访问。
- ClientDetailsServiceConfigurer:配置独立的client客户端信息,包括授权范围、授权方式、客户端权限等。授权方式包括password、implicit、client_redentials、authorization_code四种方式,其中密码授权方式必须结合 AuthenticationManager 进行配置。
- AuthorizationServerEndpointsConfigurer:配置授权服务器的Token存储方式、Token配置、授权模式
Token存储配置,默认使用DefaultTokenServices管理生命周期。Token存储通过配置 TokenStore,默认使用内存存储,包括一下存储方式。
- InMemoryTokenStore 默认方式,保存在本地内存
- JdbcTokenStore 存储数据库
- RedisTokenStore 存储Redis,这应该是微服务下比较常用方式
- JwtTokenStore 分布式跨域JWT存储方式
Resource Server
开启@EnableResourceServer注解,在服务中声明资源服务器。
继承实现ResourceServerConfigurerAdapter 类配置资源服务器安全属性,如Token的配置。
如何访问资源服务器中的API
要实现访问资源服务器中API,常用的方法有以下三种情况:
- 在校验request中的token时,使用RemoteTokenServices去调用AuthServer中的/auth/check_token。
- 共享数据库,使用Jdbc存储和校验token,避免再去访问AuthServer。
- 使用JWT签名的方式,资源服务器自己直接进行校验,不借助任何中间媒介。
网友评论