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

SAML 學習筆記:SSO 單一登入流程圖解析 (含多 IdP 架構)

     編輯:關於.NET

前言

學習 SAML 2.0 時整理的兩張核心流程圖,涵蓋標準 SP-Initiated SSO 與多身分提供者 (IdP) 情境,供後續查閱與團隊分享。

流程圖一:標準 SAML SSO 流程 (SP-Initiated)

SAML SSO 標準流程圖

關鍵步驟解析

  1. 用戶存取 SP:瀏覽器請求服務提供者 (SP) 受保護資源。
  2. SP 產生 AuthnRequest:SP 建立 SAML 認證請求 (HTTP Redirect/POST),導向 IdP。
  3. IdP 驗證用戶:身分提供者 (IdP) 挑戰用戶認證 (帳密、MFA、SSO Session 等)。
  4. IdP 回應 SAML Response:包含 Assertion (主體、屬性、條件)、簽章、加密。
  5. SP 驗證回應:檢查簽章、Issuer、Audience、NotBefore/NotOnOrAfter、Replay 防護。
  6. 建立本地 Session:SP 設定 Cookie/Token,授權用戶存取資源。

流程圖二:多 IdP 架構下的 SAML SSO

多 IdP SAML SSO 流程圖

多 IdP 關鍵差異

  • Discovery Service (DS) / WAYF:用戶先導向探索服務,選擇所屬 IdP (學術聯盟常見)。
  • SP 需支援多 IdP 中繼資料:動態載入/快取多組 IdP 憑證與端點。
  • Assertion 驗證邏輯統一:無論哪個 IdP,驗證流程 (簽章、時間、對象) 一致。
  • 屬性映射策略:不同 IdP 釋出屬性格式可能不同,SP 需正規化映射。

核心 SAML 元素速查

元素用途
<AuthnRequest>SP 發起認證請求,含 ForceAuthn、IsPassive、ProtocolBinding
<Response>IdP 回應,含 Status、Assertion、Signature
<Assertion>安全斷言,核心載體:Subject、Conditions、AuthnStatement、AttributeStatement
<Subject>主體識別:NameID (持久/暫時)、SubjectConfirmation (Bearer/Holder-of-Key)
<Conditions>有效條件:NotBefore、NotOnOrAfter、AudienceRestriction

常見坑點與對策

問題原因解決
時間偏移導致驗證失敗SP/IdP 伺服器時鐘不同步啟用 NTP、寬容 Skew (如 3 分鐘)
重放攻擊Assertion 被攔截重送SP 維護 InResponseTo/Assertion ID 去重快取
簽章驗證失敗憑證過期、演算法不支援 (SHA-1 棄用)定期輪換 SHA-256 憑證、支援 RSA-SHA256
多 IdP 憑證管理混亂手動維護 metadata實作 Metadata 自動同步 (定時下載/簽章驗證)

實作建議

  1. 使用成熟庫:Sustainsys.Saml2 (ASP.NET Core)、ComponentSpace SAML、OpenSAML (Java)。
  2. 啟用 **Metadata 交換**:SP/IdP 互相發布 XML Metadata,自動同步端點與憑證。
  3. 採用 **HTTP POST Binding** 傳遞 Response,避免 URL 長度限制與記錄敏感資訊。
  4. 記錄完整 SAML 訊息 (去敏感化) 供除錯與稽核。

結語

SAML SSO 流程雖繁雜,但核心邏輯穩定:信任傳遞 + 斷言驗證。掌握兩張流程圖的關鍵節點,配合成熟庫實作,即可構建企業級聯盟身分識別系統。

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