SAML 和 OIDC 的差異是什麼?
本文提供 SAML 和 OIDC 協議的概述,並介紹它們的典型驗證流程。我們比較了每個協議的明顯差異、優缺點。此外,根據潛在的用戶場景,我們提供了在這兩個協議之間做出選擇的指導。
OpenID Connect (OIDC) 和安全聲明標記語言 (SAML) 是允許身份提供者 (IdPs) 實施用戶身份驗證和存取控制的協議。每個協議都定義了自己的機制來維護經驗證用戶的身份,然後用來授予或拒絕對受保護應用的存取。
SAML 和 OIDC 是什麼?
IdPs 維護用戶身份信息的數據庫。服務提供者 (SPs) 依賴於這些信息來驗證用戶,有時允許單次身份驗證可用於多個應用上(單一登錄)。OIDC 和 SAML 是定義這些用戶身份相關信息在這兩個實體之間如何流動的標準。它們的最終目標是相同的:用戶身份驗證。然而,它們實現這一目標的方法有所不同。
SAML
自 2005 年以來,SAML 2.0 是當前的標準版本。它使用 XML 來格式化身份信息、請求和響應。XML 是一種成熟的文件格式標準,既容易讓人理解,也能被計算機解讀。要傳送或接收 XML 編碼的信息,它使用基本的 SOAP 或 HTTP 請求。SAML 協議定義的服務請求身份信息的是服務提供者 (SP)。
在介紹典型的 SAML 身份驗證過程之前,我們需要了解 SAML 驗證所依賴的元件。在 IdP 和 SP 可以互相識別並完成驗證過程之前,它們需要通過 XML 格式的元數據進行 "交換" 必要信息。交換的信息包括:
- 公開密鑰,IdP 和 SP 生成各自的私鑰和公鑰並交換,來對通信進行簽名或加密。隨著網路通信安全技術的發展,大多數情況下現在只需要對請求進行簽名,省略加密步驟。
- 端點,用於 SP 向 IdP 發送 SAML 驗證請求,以及 SP 接收來自 IdP 驗證請求的 SAML 斷言。
- 支持的 XML 屬性格式,用於 IdP 在完成驗證後向 SP 傳送所需的用戶信息。
一旦 IdP 和 SP 知曉了上述信息,它們就可以進行授權過程(典型的 SP 發起身份驗證流程):
OIDC
OIDC 是一個增強了 OAuth 2.0 框架的現代協議。它使用基於 JSON 的 Web 令牌 (JWT) 來構建數據負載。JWT 是一個成熟的行業標準,為實體之間安全交換和表示主張制定了指南。這些主張,本質上是加密的用戶數據,對身份驗證和管理至關重要。OIDC 主要使用普遍存在的 HTTPS 來進行數據傳輸。
如廣為人知,OIDC 協議支持多種不同的流程,包括授權碼流程、隱式流程和混合流程。在下面的例子中,我們將討論其中最安全且最典型的:授權碼流程。這也是 Logto 使用的流程。
OIDC 和 SAML 的不同之處
- 鑒於其較新的發展,OIDC 更適合現代應用的身份驗證,相較於更早的 SAML 標準。
- 從歷史上看,SAML 出現在 OIDC 之前,並已整合到許多現有的大型企業系統中。
- 與 SAML 的臃腫的 XML 文檔相比,OIDC 的 JWT 更緊湊,且在處理上更具用戶友好性。
- 配置 OIDC 一般比 SAML 更簡單。
- OIDC 的一個主要特點是定義了“範圍”,允許 IdPs 管理各種權限。應用可以向 IdPs 請求特定權限,這些權限在用戶批准後被授予。OIDC 的這一特徵為 IdPs 提供了細化權限控制的能力。
該如何在 OIDC 和 SAML 之間選擇?
OIDC 和 SAML 都是強大的身份驗證系統,各自有其獨特的優勢。選擇取決於你組織的具體需求。
- 為了快速高效地部署身份平台,OIDC 更優於 SAML。實施 OIDC 更為簡單,避免了 SAML 需要處理元數據解析、驗證請求處理和 SAML 斷言分析的複雜 XML 處理。
- OIDC 非常適合擁有廣泛 API 互動和複雜權限機制的環境,為權限提供更靈活和高效的控制,並提供更好的開發者體驗。
- 當與已建立的 SAML 為基礎的系統集成時,選擇 SAML 確保更順暢的系統互操作性,減少整合不同協議所需的努力。
市場上有沒有好的方案?
Logto 是一款深受開發者歡迎的身份解決方案,最近推出了企業 SSO 功能。它提供對 SAML 和 OIDC 協議的支持,以及與主流 IdPs 的開箱即 用集成,如 Google Workspace 和 Microsoft Entra ID(前身是 Azure AD)。使用 Logto,你可以避免自行實施 SSO 的複雜性。幾個簡單的配置步驟即可在你的身份系統中啟用 SSO 支持,讓你可以選擇合適的協議來滿足業務需求。