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

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