全面擁抱 Spring 全新 OAuth 的解決方案
PIG 微服務開發(fā)平臺 v3.5 發(fā)布,正式支持 Spring Authorization Server
以下全文 Spring Authorization Server 簡稱為: SAS
本文以PIG 微服務[1]開發(fā)平臺為演示,適用于 Spring Security OAuth 2.3 <-> 2.5 的認證中心遷移
背景
Spring 團隊正式宣布 Spring Security OAuth 停止維護,該項目將不會再進行任何的迭代

目前 Spring 生態(tài)中的 OAuth2 授權服務器是 Spring Authorization Server 已經(jīng)可以正式生產(chǎn)使用 作為 SpringBoot 3.0 的過渡版本 SpringBoot 2.7.0 過期了大量關于 SpringSecurity 的配置類,如沿用舊版本過期配置無法向上升級。
遷移過程
① Java 1.8 支持
目前最新的 SAS 0.3 基于 Java 11 構建,低版本 Java 無法使用
經(jīng)過和 Spring Security 官方團隊的溝通 0.3.1 將繼續(xù)兼容 Java 1.8

我們聯(lián)合 springboot 中文社區(qū)編譯了適配 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 協(xié)議不支持密碼模式
擴展支持短信登錄
③ Redis 令牌存儲

官方目前沒有提供基于 Redis 令牌持久化方案
PIG 擴展 PigRedisOAuth2AuthorizationService 支持
④ Token 輸出格式化
使用自省令牌的情況下 默認實現(xiàn)為
ku4R4n7YD1f584KXj4k_3GP9o-HbdY-PDIIh-twPVJTmvHa5mLIoifaNhbBvFNBbse6_wAMcRoOWuVs9qeBWpxQ5zIFrF1A4g1Q7LhVAfH1vo9Uc7WL3SP3u82j0XU5x

為方便結(jié)合 redis 高效檢索 token ,結(jié)合 RDM 分組也可以更方便的圖形化觀察
統(tǒng)一前綴::令牌類型::客戶端ID::用戶名::uuid
@Bean
public OAuth2TokenGenerator oAuth2TokenGenerator() {
CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator();
// 注入Token 增加關聯(lián)用戶信息
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 增強輸出關聯(lián)用戶信息
{
"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": {}
}
}
⑥ 授權碼模式個性化


⑦ 資源服務器
自省方案擴展支持資源資源服務器本地查詢

擴展資源服務器本地自省

- 優(yōu)勢:1. 用戶狀態(tài)實時更新 2. 減少網(wǎng)絡調(diào)用提升性能
參考資料
PIG 微服務: https://github.com/pig-mesh/pig
推薦閱讀
你好,我是程序猿DD,10年開發(fā)老司機、阿里云MVP、騰訊云TVP、出過書創(chuàng)過業(yè)、國企4年互聯(lián)網(wǎng)6年。從普通開發(fā)到架構師、再到合伙人。一路過來,給我最深的感受就是一定要不斷學習并關注前沿。只要你能堅持下來,多思考、少抱怨、勤動手,就很容易實現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個事情,一定是堅持了才能看到希望,而不是看到希望才去堅持。相信我,只要堅持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關注我,這里會經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。
