繁體中文(香港)
  • OIDC
  • SAML
  • SSO
  • authentication
  • authorization

SAML 與 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 綁定:定義如何在不同的通信協議如 HTTP POST、HTTP 重定向等上傳遞 SAML 消息。
  6. SAML 元數據:包含 IdP 和 SP 配置信息的基於 XML 的文檔。它包括用於在 IdP 和 SP 之間建立信任的公鑰、端點和支持的綁定。
  7. 單一登入端點:SP 將用戶重定向到與 IdP 認證的端點。
  8. 斷言使用者服務 (ACS) URL:身份提供者認證成功後發送 SAML 斷言的端點。

SAML 如何運作?

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

SAML 的優勢

  • 成熟且廣泛採用:SAML 是一個成熟的協議,已存在很長時間並被企業廣泛採用。
  • 標準化:SAML 是由 OASIS 維護的開放標準,確保不同供應商之間的互操作性。
  • 單一登入:SAML 使基於網絡的單一登入成為可能,允許用戶只需驗證一次即可訪問多個應用程式。
  • 集中用戶管理: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 是更現代化且輕量的協議,並且在現代 web 和移動應用中日益受歡迎。OIDC 使用 JWT 傳輸身份信息,相比基於 XML 的 SAML 斷言,更緊湊且更易於使用。它尤其在面向消費者的應用和 API 安全中流行。

OIDC 組件

  1. 身份提供者 (IdP):認證用戶並向服務提供者提供身份信息的實體。
  2. 依賴方(RP):提供服務給用戶並依賴身份提供方驗證用戶的實體。例如:web 應用、移動應用或 APIs。
  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) 等。
  • 採用率:相比 SAML,OIDC 在企業領域相對較新。某些遺留系統可能仍依賴 SAML 進行 SSO 目的。

SAML 與 OIDC 的比較

方面SAMLOIDC
令牌格式基於 XML 的 SAML 斷言基於 JSON 的 JWT 令牌
主要使用情境企業 SSO、B2B 整合面向消費者的應用、API 安全
易用性複雜,需要深入了解 XML簡單,基於 JSON,易於實施
採用率被企業廣泛採用在現代應用中越來越流行
安全性成熟但被認為安全性較低現代化,更加安全
靈活性有限,為 SSO 使用情境設計靈活,支持各種使用情境

SAML 和 OIDC 的未來

SAML 和 OIDC 都被廣泛用於身份驗證和授權目的。

SAML 仍然是企業 SSO 和 B2B 整合的基石。其對聯合身份管理的強大支持和久經考驗的記錄確保了其持續的相關性,尤其是對於遺留系統和大規模組織。

另一方面,OIDC 隨著現代應用中對安全和可擴展身份驗證的需求而不斷演變。其輕量級的特性以及與 APIs 和微服務的對應使其成為雲原生和分佈式架構的基石。隨著無密碼身份驗證、生物識別和多因素身份驗證 (MFA) 的興起,OIDC 預計將無縫集成最新技術,確保其未來的相關性。