全面拥抱 Spring 全新 OAuth 的解决方案
The following article is from JAVA架构日记 Author 冷冷
PIG 微服务开发平台 v3.5 发布,正式支持 Spring Authorization Server
以下全文 Spring Authorization Server 简称为: SAS
本文以PIG 微服务[1]开发平台为演示,适用于 Spring Security OAuth 2.3 <-> 2.5 的认证中心迁移
背景
Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代
目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用 作为 SpringBoot 3.0 的过渡版本 SpringBoot 2.7.0 过期了大量关于 SpringSecurity 的配置类,如沿用旧版本过期配置无法向上升级。
迁移过程
① Java 1.8 支持
目前最新的 SAS 0.3 基于 Java 11 构建,低版本 Java 无法使用
经过和 Spring Security 官方团队的沟通 0.3.1 将继续兼容 Java 1.8
我们联合 springboot 中文社区编译了适配 java 1.8 的版本坐标如下
<dependency>
<groupId>io.springboot.security</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>0.3.0</version>
</dependency>
② 授权模式扩展
扩展支持密码模式,SAS 基于 oauth 2.1 协议不支持密码模式
扩展支持短信登录
③ Redis 令牌存储
官方目前没有提供基于 Redis 令牌持久化方案
PIG 扩展 PigRedisOAuth2AuthorizationService 支持
④ Token 输出格式化
使用自省令牌的情况下 默认实现为
ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x
为方便结合 redis 高效检索 token ,结合 RDM 分组也可以更方便的图形化观察
统一前缀::令牌类型::客户端ID::用户名::uuid
@Bean
public OAuth2TokenGenerator oAuth2TokenGenerator() {
CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator();
// 注入Token 增加关联用户信息
accessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer());
return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator());
}
⑤ Token 输出增强
使用自省令牌,默认情况下输出的 Token 格式
{
"access_token": "xx",
"refresh_token": "xx",
"scope": "server",
"token_type": "Bearer",
"expires_in": 43199
}
Token 增强输出关联用户信息
{
"sub": "admin",
"clientId": "test",
"access_token": "xx",
"refresh_token": "xx",
"license": "https://pig4cloud.com",
"user_info": {
"username": "admin",
"accountNonExpired": true,
"accountNonLocked": true,
"credentialsNonExpired": true,
"enabled": true,
"id": 1,
"deptId": 1,
"phone": "17034642999",
"name": "admin",
"attributes": {}
}
}
⑥ 授权码模式个性化
⑦ 资源服务器
自省方案扩展支持资源资源服务器本地查询
扩展资源服务器本地自省
- 优势:1. 用户状态实时更新 2. 减少网络调用提升性能
参考资料
PIG 微服务: https://github.com/pig-mesh/pig
推荐阅读
你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。