繁體中文(台灣)
  • OIDC
  • SAML
  • SSO
  • authentication
  • authorization

SAML vs OIDC

SAML 和 OIDC 是 SSO 行業中最受歡迎的兩種認證協議。本文將在架構和使用案例方面比較 SAML 和 OIDC。

Simeng
Simeng
Developer

什麼是 SAML?

SAML(安全斷言標記語言)是一種基於 XML 的開放標準,用於在不同實體(特別是身份提供者 (IdP) 和服務提供者 (SP) 之間交換認證和授權數據。 它支持基於網頁的 SSO(單點登入),允許用戶一次認證便可訪問多個應用程式。SAML 是一種成熟的協議,已經存在很長時間並被企業廣泛採用。一些最受歡迎的 SaaS 平台如 Salesforce、Workday 和 Microsoft Azure AD 都支持 SAML 的 SSO。

SAML 組件

  1. 身份提供者 (IdP):驗證用戶並向服務提供者提供身份信息的實體。
  2. 服務提供者 (SP):向用戶提供服務並依賴身份提供者驗證用戶的實體。
  3. SAML 斷言:基於 XML 的文件,承載用戶的認證和授權詳情。包括認證聲明、屬性聲明和授權決策聲明。
  4. SAML 協議:定義 IdP 和 SP 之間交換 SAML 斷言的消息格式和規則。
  5. SAML Binding:定義如何通過不同的通信協議(如 HTTP POST、HTTP Redirect 等)傳輸 SAML 消息。
  6. SAML 元數據:基於 XML 的文件,包含 IdP 和 SP 的配置信息。包括公鑰、端點和支持的 Bindings,用於在 IdP 和 SP 之間建立信任。
  7. 單點登入端點:SP 將用戶重定向到 IdP 進行身份驗證的端點。
  8. 斷言消費者服務 (ACS) URL:在成功驗證後,IdP 將 SAML 斷言發送到的端點。

SAML 如何工作?

  1. SP 發起的 SSO 流程:
  1. IdP 發起的 SSO 流程:

SAML 的優勢

  • 成熟且廣泛採用:SAML 是一種成熟的協議,存在已久並被企業廣泛採用。
  • 標準化:SAML 是由 OASIS 維護的開放標準,確保不同廠商之間的互操作性。
  • SSO:SAML 使基於網頁的 SSO 成為可能,允許用戶一次認證即可訪問多個應用程式。
  • 集中用戶管理:SAML 允許組織集中管理用戶身份並一致執行安全策略。

SAML 的挑戰

  • 複雜性:SAML 是一個複雜的協議,需要深入理解 XML 和安全概念。
  • 性能:SAML 消息基於 XML,可能很大。XML 的傳輸和解析速度較慢,與 JSON Web Token(JWT)等令牌格式相比。
  • 過時標準:SAML 是較舊的標準,比起 OIDC 安全性較低。
  • 廠商鎖定:SAML 是一個廠商特定的協議,切換廠商可能會有挑戰。

什麼是 OIDC?

OIDC(OpenID Connect)是構建在 OAuth 2.0 協議之上的身份層。類似於 SAML,OIDC 也用於在 IdP 和 SP 之間交換認證和授權數據。

與 SAML 相比,OIDC 是一種更現代且輕量的協議,正在為現代網絡和移動應用迅速普及。OIDC 使用 JWT 傳輸身份信息,與基於 XML 的 SAML 斷言相比,更精緻且更易處理。它特別受消費者應用和 API 安全領域的歡迎。

OIDC 組件

  1. 身份提供者 (IdP):驗證用戶並向服務提供者提供身份信息的實體。
  2. 依賴方 (RP):提供服務並依賴身份提供者驗證用戶的實體。例如,網頁應用、移動應用或 API。
  3. OIDC 令牌:承載用戶身份信息的令牌。
    • ID 令牌:JWT 格式令牌,內含用戶身份信息。
    • 訪問令牌:JWT 或不透明格式令牌,授予訪問受保護資源的權限。
    • 刷新令牌:用于在不需用戶重新驗證的情況下獲取新訪願令牌,給 RP 提供一種離線長期授權。
  4. OIDC 端點:用於認證和令牌交換的端點。一些最重要的端點有:
    • 發現端點:RP 可以從 IdP 獲取公開的 OIDC 配置信息的地方。
    • 認證端點:RP 發送認證請求的地方。
    • 令牌端點:RP 向授權服務器請求令牌的地方。
    • 用戶信息端點:RP 可以檢索用戶的個人檔案信息的地方。
  5. 範圍:OIDC 定義了一組標準範圍,這些範圍定義了授予 RP 的訪問權限。比如 openidprofileemailaddress 等。

OIDC 如何工作?

OIDC 提供多個專門為不同使用場景設計的流程。以下是兩個最常見的 OIDC 流程:

  1. 認證代碼流程:

認證代碼流程是 OIDC 中針對消費者應用使用最廣泛的流程。

  1. 客戶端憑據流程:

客戶端憑據流程可用於非用戶基的(機器對機器)認證。

OIDC 的優勢

  • 現代且輕量:OIDC 是一種當代協議,採用基於 JSON 的 JWT 令牌,比起基於 XML 的 SAML 斷言更精緻且更易處理。
  • 面向消費者的應用:OIDC 對於面向消費者的應用和 API 安全特別受歡迎。
  • 互操作性:基於 OAuth 2.0,OIDC 可以兼容多種平台、設備和平台。
  • 安全性:OIDC 提供了一種更安全的用戶認證和 API 保護方法。它具有多樣的現代安全特性,如令牌自省、令牌撤銷、證明碼密鑰交換(PKCE),並支持不同的認證流程以適應多樣的安全需求。
  • 易用性:OIDC 與 SAML 相比,更容易實施和操作。它對開發者更友好,且有多種語言和平台的完整庫和 SDK。

OIDC 的挑戰

  • 令牌管理:OIDC 依靠令牌進行認證和授權。需要適當的令牌管理實踐來確保安全。
  • 複雜性:雖然 OIDC 對於基礎設置簡單,但由於其靈活性,實現高級定製時可能增添複雜性。例如,自定義聲明和基於角色的訪問控制 (RBAC) 等。
  • 採用:OIDC 比 SAML 相對較新,特別是在企業領域。一些舊系統可能仍依賴 SAML 進行 SSO。

SAML 和 OIDC 比較

方面SAMLOIDC
令牌格式基於 XML 的 SAML 斷言基於 JSON 的 JWT 令牌
主要用例企業 SSO,B2B 整合面向消費者的應用,API 安全
易用性複雜,需要深刻理解 XML簡單,基於 JSON,易於實施
採用企業廣泛採用在現代應用中日益普及
安全性成熟但被認為安全性較低現代化,安全性較高
靈活性限制,設計用於 SSO 用例靈活,支持多樣的用例

SAML 和 OIDC 的未來

SAML 和 OIDC 都被廣泛用於認證和授權目的。

SAML 仍是企業 SSO 和 B2B 整合的基石。其對聯邦身份管理的強大支持和良好的記錄確保其持續的相關性,特別是對於舊系統和大型組織。

另一方面,OIDC 隨著現代應用對安全和可擴展性認證的需求而不斷發展。其輕量性質和與 API 和微服務的對齊使之成為雲原生和分佈式架構的基石。隨著無密碼認證、生物識別和多因素認證 (MFA) 的興起,OIDC 預計將能夠無縫整合新興技術,確保未來幾年的相關性。