首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

打造 Java Web 應用的 OpenID 提供者:實現單點登入 (SSO) 的閉環架構

     編輯:Java 相關知識

前言:為何需要自建 OpenID 提供者?

OpenID 已成為廣泛採用的身份驗證標準,讓用戶憑單一身份識別符存取多個網站。在 第一部分 中,我們介紹了如何將 OpenID 整合為依賴方 (RP)。本文進一步探討 OpenID 提供者 (OP) 的建構,特別適用於「閉環」架構:多個受信任的 Java Web 應用組成叢集,共享同一身份驗證核心,實現單點登入 (SSO)。用戶只需登入一次,即可無縫存取叢集內所有受保護資源。

單點登入架構的核心角色

OpenID 依賴方 (RP)

RP 是受保護的線上資源(網站、API、檔案等)。它將身份驗證委託給 OP,並可透過 Simple Registration (SReg) 或 Attribute Exchange (AX) 擴展請求使用者屬性(如電子郵件、全名)。

OpenID 提供者 (OP)

OP 是身份驗證的中央權威。它負責發行 OpenID、驗證使用者憑證、回應 RP 的驗證請求,並根據 SReg/AX 規範回傳使用者屬性。在閉環架構中,叢集內的某一應用扮演 OP 角色,其他應用作為 RP。

使用 openid4java 建構 OP

openid4java 庫完整實作了 OpenID Authentication 2.0 規範,大幅簡化開發。範例應用採用 Wicket 框架,將 OP 核心邏輯封裝於 OpenIdProviderService 類別中,主要方法包括:

  • getServerManager():配置並返回 ServerManager 實例。
  • getOpEndpointUrl():回傳 OP 接收請求的端點 URL(如 https://localhost:8080/openid-provider-sample-app/sample/OpenIdLoginPage)。
  • processAssociationRequest():處理 RP 發起的關聯請求(Diffie-Hellman 金鑰交換)。
  • sendDiscoveryResponse():回傳 XRDS 文件,宣告 OP 的服務端點。
  • createAuthResponse() / buildAuthResponse():建構驗證回應,包含 SReg/AX 屬性資料。

SSO 流程詳細解析

  1. 請求受保護資源:使用者點擊連結存取 RP 的受保護頁面(如 OpenIdRegistrationPage)。
  2. RP 執行發現:RP 呼叫 RegistrationService.performDiscoveryOnUserSuppliedIdentifier(OP端點URL),取得 DiscoveryInformation 並與 OP 建立關聯。
  3. OP 回應發現請求:OP 收到空請求時,產生 XRDS 文件(application/xrds+xml)回傳,確認其為使用者的 OpenID 服務提供者。
  4. RP 請求驗證身份:RP 建立 AuthRequest,附加 SReg/AX 屬性請求(如 favoriteColor),重導瀏覽器至 OP 端點。
  5. OP 驗證使用者:
    • 若 Session 中已有登入記錄,直接產生成功回應(SSO 核心機制)。
    • 否則顯示登入表單(圖 2),驗證成功後將 DiscoveryInformation 存入 Session,回傳 AuthResponse。
  6. RP 授予存取權:RP 驗證回應簽名,解析 AX/FetchResponse 取得使用者屬性,授予資源存取權(圖 3)。

Attribute Exchange (AX) 擴展的靈活運用

不同於 SReg 固定屬性集,AX 允許 RP 與 OP 交換任意自訂屬性,只需雙方協定屬性名稱與 URI(如 https://makotogroup.com/schema/1.0/favoriteColor)。範例中,RP 以 FetchRequest 要求屬性,OP 以 FetchResponse 回傳,實現極具彈性的資料交換。

部署與測試

範例應用打包為 WAR,部署於 Tomcat。啟動後訪問 https://localhost:8080/openid-provider-sample-app/ 即可體驗完整 SSO 流程。建議開啟 TRACE 級別日誌,觀察 openid4java 內部交互細節。

結語

透過自建 OP,企業內部應用叢集可輕鬆實現安全、標準化的單點登入。openid4java 處理了繁複的協定細節,開發者專注於業務邏輯與屬性交換定義。完整原始碼可從文末下載連結獲取。

範例應用主頁面
OP 登入畫面
RP 顯示從 OP 獲取的使用者資訊

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved