JAP 1.0.2 正式發(fā)布,jap-ids 支持多租戶、適配前后端分離、自定義授權流程等新特性
JAP 1.0.2 正式發(fā)布
概要
1.
jap-ids1.0.2 支持多租戶場景、支持動態(tài)issuer、支持前后端分離的業(yè)務場景;2.jap-social對外提供refreshToken、revokeToken和getUserInfo方法;3.新增Pipeline模式,支持自定義部分業(yè)務場景的流程,同時引入SPI機制;4.基于 Github Action,JAP 正式啟用快照版,比如:1.0.2-SNAPSHOT。(快照版實時更新,但不可用于生產環(huán)境)5.使用jap-bom管理項目版本依賴,使用flatten-maven-plugin簡化 pom 版本6.JustAuth 和 JAP 項目已經加入 “開源軟件供應鏈點亮計劃 - 暑期2021[1]”,歡迎各位在校學生踴躍參與!可在“碼一碼”公眾號中回復 “summer” 獲取活動詳情。
JAP 1.0.2 版本更新內容
本次更新涉及到字段、方法返回類型的修改,請升級的時候注意??梢詤⒄毡疚南路降母抡f明進行修改、調整。
新功能/特性
jap-ids 模塊
?在IdsConfig中添加 enableDynamicIssuer 屬性,boolean 類型。當 enableDynamicIssuer=true 時,開發(fā)者不再需要單獨設置 issuer,jap-ids 將從當前請求的域名中自動提取 issuer。
此功能針對客戶端支持
自定義域名的業(yè)務場景??梢酝ㄟ^域名的標識(比如二級域名jap.justauth.plus中的標識就是jap)確定用戶所屬的客戶端(也可以對應到租戶)。
?在IdsConfig 中添加 loginPageUrl 屬性,loginPageUrl 與 loginUrl 的區(qū)別:
?
loginPageUrl:登錄表單頁面 URL,關鍵字:頁面。?loginUrl:登錄的api URL,關鍵字:API。
?在IdsConfig中添加 externalLoginPageUrl 屬性,boolean 類型。
如果授權服務未提供登錄頁面(登錄頁面由其他服務托管,比如登錄頁面在單獨的靜態(tài)服務中部署),則需要啟用此配置。
?在IdsConfig中添加 externalConfirmPageUrl 屬性,boolean 類型。
如果授權服務未提供授權確認頁面(授權確認頁面由其他服務托管,比如授權確認頁面在單獨的靜態(tài)服務中部署),則需要啟用此配置。
?在IdsConfig中添加 authorizeAutoApproveUrl 屬性。
當授權 URL 中包含
autoapprove=true時,授權服務器在用戶登錄完成后,不會跳轉到confirmPageUrl,而是直接跳轉到authorizeAutoApproveUrl。
?添加 IdsUserStoreService 接口類,以支持登錄后對用戶數(shù)據的自定義操作,默認為 Session 存儲用戶信息。感謝微信用戶(antscqy)的建議。?添加 IdsPipeline 接口,開發(fā)人員可以自定義流程,目前僅支持自定義 IdsxxFilter(過濾器)和 LoginEndpoint 的流程。?添加 spi 插件機制,jap-ids 對外提供的接口,都可以以 spi 的形式實現(xiàn)。?添加以下內置 scope:profile, address, read and write。?在 OauthUtil#createAuthorizeUrl(String, IdsRequestParam) 中添加 uid 參數(shù)(可選的參數(shù))。
jap-social 模塊
?SocialStrategy 對外提供 refreshToken、revokeToken 和 getUserInfo 方法。感謝群友的反饋。
修改
POM 依賴
?將 javax.servlet-api 依賴替換為 jakarta.servlet-api。
jap-ids 模塊
?將 IdsConfig.confirmUrl 參數(shù)名稱修改為 confirmPageUrl。?將 ApprovalEndpoint#getAuthClientInfo(HttpServletRequest) 的返回類型修改為IdsResponse<String, Map<String, Object>>。?將 Ap provalEndpoint#authorize(HttpServletRequest) 的返回類型修改為 IdsResponse<String, String>。?將 AuthorizationEndpoint#agree(HttpServletRequest) 的返回類型修改為 IdsResponse<String, String>。?將 LoginEndpoint#signin(HttpServletRequest) 的返回類型修改為 IdsResponse<String, String>。?將 LogoutEndpoint#logout(HttpServletRequest) 的返回類型修改為 IdsResponse<String, String>。?修改 ClientDetail 類的注釋。?將 IdsResponse#getData() 方法的返回類型修改為泛型。?刪除 IdsScopeProvider#initScopes(List<IdsScope>) 方法,不再允許重置系統(tǒng)內置的 scope,新版 jap-ids 支持添加新的 scope 以及 修改內置的 scope 描述。?當response_type=id_token時,id_token 中將返回用戶的基本信息(依據 scope 授權范圍)。?優(yōu)化 UserInfoEndpoint#getCurrentUserInfo(HttpServletRequest) 方法的業(yè)務流程,對于用戶的特定屬性,比如手機號、郵箱等,按照提供的 scope 決定是否返回。?修改 IdsUserService 接口的loginByUsernameAndPassword 和 getByName 方法,分別新增了 clientId 入參。
針對多租戶場景下,同一個用戶可能存在多個租戶主體下,單純依靠用戶賬密已經無法唯一確定一個用戶,這種情況下業(yè)務系統(tǒng)可以根據
clientId獲取具體的租戶下的用戶信息。
PR
?合并 Gitee PR #11[2] by @dreamlu[3]。使用 flatten-maven-plugin 簡化 pom 版本?合并 Gitee PR #12[4] by @sywd[5]。添加 jap-bom 管理項目版本依賴?合并 Gitee PR #13[6] by @dreamlu[7]。代碼優(yōu)化,方便作為 Spring bean 初始化?合并 Gitee PR #14[8] by @dreamlu[9]。優(yōu)化 pom 配置,修復 jap-bom 導入問題
關于 JAP
JAP 是什么?
JAP 是一款開源的登錄認證中間件,基于模塊化設計,為所有需要登錄認證的 WEB 應用提供一套標準的技術解決方案,開發(fā)者可以基于 JAP 適配絕大多數(shù)的 WEB 系統(tǒng)(自有系統(tǒng)、聯(lián)邦協(xié)議)。
JAP 有哪些功能?

JAP 有什么優(yōu)勢?
?易用性:JAP 的 API 沿襲 JustAuth 的簡單性,做到了開箱即用的程度。JAP 高度抽象各種登錄場景,提供了多套簡單使用的 API,極大程度的降低了開發(fā)者的學習成本和使用成本?全面性:JAP 全量適配 JustAuth 支持的第三方平臺,實現(xiàn)第三方登錄。同時也支持所有基于標準OAuth2.0 協(xié)議或者 OIDC 協(xié)議或者 SAML 協(xié)議的應用、系統(tǒng),同時 JAP 還提供不同語言版本的項目 SDK,適配多種研發(fā)場景?模塊化:JAP 基于模塊化設計開發(fā),針對每一種登錄場景,比如賬號密碼、OAuth、OIDC等,都單獨提供了獨有的模塊化解決方案?標準化:JAP 和業(yè)務完全解耦,將登錄認證相關的邏輯抽象出一套標準的技術解決方案,針對每一種業(yè)務場景,比如用戶登錄、驗證密碼、創(chuàng)建并綁定第三方系統(tǒng)的賬號等,都提供了一套標準的策略或者接口,開發(fā)者可以基于 JAP,靈活并方便的完成相關業(yè)務邏輯的開發(fā)和適配?通用性:JAP 不僅可以用到第三方登錄、OAuth授權、OIDC認證等業(yè)務場景,還能適配開發(fā)者現(xiàn)有的業(yè)務系統(tǒng)的普通賬號密碼的登錄場景,基本將所有登錄相關的業(yè)務場景都已經涵蓋。針對 WEB 應用,JAP 將提供滿足各種不同登錄場景的解決方案(和開發(fā)語言無關)
JAP 適用于哪些場景?
JAP 適用于所有需要登錄認證功能的場景。比如:
?要求規(guī)范:新項目立項,你們需要研發(fā)一套包含登錄、認證的系統(tǒng),并且從長遠方面考慮,你們需要一套標準的、靈活的、功能全面的登錄認證功能。?需求靈活:現(xiàn)有登錄模塊為自研,但是新一輪的技術規(guī)劃中,你們想將登錄認證模塊重構,以更加靈活的架構適應后面的新需求,比如:集成 MFA 登錄、集成 OAuth 登錄、SAML登錄等。?力求省事:你們的項目太多(或者是開發(fā)語言較多,比如:Java、Python、Node 等),每個項目都需要登錄認證模塊,想解決這種重復勞動的問題,使研發(fā)人員有更多的時間和精力投入到業(yè)務開發(fā)中,提高研發(fā)產能和研發(fā)效率。關于 JAP 的更多內容,可以參考《JAP 產品技術白皮書[10]》
相關鏈接
?Gitee:https://gitee.com/fujieid/jap?Github:https://github.com/fujieid/jap?CodeChina:https://codechina.csdn.net/fujieid/jap?開發(fā)者文檔:https://justauth.plus
引用鏈接
[1] 開源軟件供應鏈點亮計劃 - 暑期2021: https://justauth.wiki/resource/summer2021.html[2] #11: https://gitee.com/fujieid/jap/pulls/11[3] @dreamlu: https://gitee.com/dreamlu[4] #12: https://gitee.com/fujieid/jap/pulls/12[5] @sywd: https://gitee.com/sywd[6] #13: https://gitee.com/fujieid/jap/pulls/13[7] @dreamlu: https://gitee.com/dreamlu[8] #14: https://gitee.com/fujieid/jap/pulls/14[9] @dreamlu: https://gitee.com/dreamlu[10] JAP 產品技術白皮書: https://justauth.plus/paper/JAP-paper-V1.0.0.pdf
