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

Java Web 應用整合 OpenID 身份驗證:依賴方 (RP) 實作完整指南

     編輯:Java 相關知識

OpenID 核心概念速覽

OpenID 是去中心化身份驗證協定,三大核心角色:

  • OpenID 識別符:唯一字串(如 https://openid.jstevenperry.com/steve),代表使用者身份。
  • 依賴方 (RP):需保護資源的網站/服務,委託 OP 驗證使用者。
  • 提供者 (OP):發行識別符、驗證使用者憑證的服務(如 myOpenID、Google、Yahoo)。

取得 OpenID 極為簡單

前往 myOpenID 註冊,幾分鐘即可擁有專屬 OpenID。若已有 Google、Yahoo、WordPress 帳號,多半已具備 OpenID,直接以該帳號登入支援 OpenID 的網站即可。

範例應用架構:Wicket + openid4java

採用 Wicket 框架構建 UI,核心驗證邏輯封裝於 RegistrationService(com.makotogroup.sample.model),五大關鍵方法:

  • getConsumerManager():取得 openid4java 核心 ConsumerManager 實例(單例模式)。
  • performDiscoveryOnUserSuppliedIdentifier():執行發現與關聯,回傳 DiscoveryInformation。
  • createOpenIdAuthRequest():建構 AuthRequest,附加 SReg 請求(email、fullname、dob 等)。
  • processReturn():驗證 OP 回傳的回應,解析 SReg 屬性填充 RegistrationModel。
  • getReturnToUrl():定義驗證成功後的回調 URL。

完整驗證流程步驟

  1. 獲取使用者提供的識別符:使用者在註冊頁輸入 OpenID(如 redneckyogi.myopenid.com),點擊確認(圖 1)。
  2. 發現:RP 規範化識別符(補上 https://),呼叫 ConsumerManager.discover() 定位 OP(myOpenID),並執行 associate() 建立共享密鑰(Diffie-Hellman)。
  3. 身份驗證請求:RP 建立 AuthRequest,附加 SReg 請求,重導瀏覽器至 OP 登入頁(圖 2)。
  4. 驗證回應處理:OP 驗證成功後重導回 RP 的 return-to URL,RP 呼叫 processReturn() 驗證簽名、解析屬性(圖 3)。
  5. 授予存取權:驗證通過,RP 顯示使用者資料供確認儲存。

關鍵程式碼片段

發現與關聯

List<DiscoveryInformation> discoveries = consumerManager.discover(userSuppliedIdentifier);
DiscoveryInformation ret = consumerManager.associate(discoveries);

建構驗證請求含 SReg

AuthRequest authRequest = consumerManager.authenticate(discoveryInformation, returnToUrl);
SRegRequest sRegRequest = SRegRequest.createFetchRequest();
sRegRequest.addAttribute("email", false);
sRegRequest.addAttribute("fullname", false);
authRequest.addExtension(sRegRequest);

處理回調驗證

RegistrationModel model = RegistrationService.processReturn(
    discoveryInformation, pageParameters, returnToUrl);

部署與測試

專案打包為 WAR,放入 Tomcat webapps 目錄啟動。訪問 https://localhost:8080/openid4java-sample-app/ 即可測試完整流程。原始碼下載見文末。

取得使用者提供的識別符頁面
myOpenID 處理驗證請求畫面
顯示來自 OP 的個人資料資訊

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