繁體中文(香港)
  • sso
  • saml
  • oidc

SAML 和 OIDC 有什麼區別?

在這篇文章中,我們概述了 SAML 和 OIDC 協議,以及它們的典型身份驗證流程。我們比較了每個協議的不同差異、優缺點。此外,根據潛在的用戶場景,我們提供了在這兩個協議之間進行選擇的指導。

Darcy Ye
Darcy Ye
Developer

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
Product screenshot

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 的一個關鍵特性是其對 "範圍" 的定義,允許 IdP 管理多種權限。應用程序可以要求 IdP 授予特定權限,並在用戶批准後授予。這個 OIDC 的屬性為 IdP 提供了細粒度的權限控制。

如何選擇 OIDC 和 SAML?

兩者都是強大的身份驗證系統,各有其獨特的優勢。選擇取決於你組織的具體需求。

  • 對於快速和高效的身份平台部署,OIDC 比 SAML 更可取。實施 OIDC 更簡單,避免了 SAML 在元數據解析、身份驗證請求處理和 SAML 斷言分析方面所需的複雜 XML 處理。
  • OIDC 是廣泛存在 API 交互和複雜權限機制環境中的理想選擇,提供了更靈活和高效的權限控制以及更好的開發者體驗。
  • 在與基於 SAML 的已建立系統集成時,選擇 SAML 確保更順暢的系統互操作性,並減少跨不同協議的橋接工作。

市場上有沒有好的解決方案?

Logto,開發者中廣受歡迎的身份解決方案,最近推出了企業單一登入功能。它提供了對 SAML 和 OIDC 協議的支持,並與主流 IdP(如 Google Workspace 和 Microsoft Entra ID,前身是 Azure AD)有現成集成。使用 Logto,你可以避開自行實施單一登入的複雜性。通過幾個簡單的配置步驟就能在你的身份系統中啟用單一登入支持,讓你可以選擇合適的協議來滿足你的業務需求。