背景
由于项目的关系,系统需要集成oAuth2.0功能。关于OAuth2.0的概念参考文章理解OAuth 2.0,或者 OAuth 2.0最简向导
实现自定义功能
依赖jar
我们系统使用的Spring cloud G版本,引入依赖jar包
<!-- oAuth2 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
OAuth2.0 代码概述
OAuth 2.0 定义了四种授权方式
- ○ 授权码模式(authorization code)
- ○ 简化模式(implicit)
- ○ 密码模式(resource owner password credentials)
- ○ 客户端模式(client credentials)
在Spring OAuth2.0中除了定义以上四种授权模式外,还定义一个特殊的授权模式:刷新
四种模式和refresh模式对应的处理类是:
- ○ AuthorizationCodeTokenGranter: 对应 authorization_code 模式
- ○ ImplicitTokenGranter :对应 implicit模式
- ○ ClientCredentialsTokenGranter:对应 client_credentials模式
- ○ ResourceOwnerPasswordTokenGranter:对应 password 模式
- ○ RefreshTokenGranter: 对应 refresh_token模式
其他一些重要的类:
-
○ AuthorizationCodeServices:用于“授权码模式( authorization code )”如何保存"授权码",默认有两种实现:
- § InMemoryAuthorizationCodeServices:授权码保存在内存中
- § JdbcAuthorizationCodeServices:授权码保存在数据库中
-
○ TokenStore:存储token的方式,常用有以下几种实现
- § InMemoryTokenStore:内存存储
- § JdbcTokenStore:数据库存储
- § RedisTokenStore:redis存储
- § JwkTokenStore和JwtTokenStore
-
○ ClientDetailsService:客户端账号管理
- § InMemoryClientDetailsService:使用内存管理客户端账号
- § JdbcClientDetailsService:使