SAML vs OIDC
SAML 和 OIDC 是 SSO 行業中最受歡迎的兩種認證協議。本文將在架構和使用案例方面比較 SAML 和 OIDC。
什麼是 SAML?
SAML(安全斷言標記語言)是一種基於 XML 的開放標準,用於在不同實體(特別是身份提供者 (IdP) 和服務提供者 (SP) 之間交換認證和授權數據。 它支持基於網頁的 SSO(單點登入),允許用戶一次認證便可訪問多個應用程式。SAML 是一種成熟的協議,已經存在很長時間並被企業廣泛採用。一些最受歡迎的 SaaS 平台如 Salesforce、Workday 和 Microsoft Azure AD 都支持 SAML 的 SSO。
SAML 組件
- 身份提供者 (IdP):驗證用戶並向服務提供者提供身份信息的實體。
- 服務提供者 (SP):向用戶提供服務並依賴身份提供者驗證用戶的實體。
- SAML 斷言:基於 XML 的文件,承載用戶的認證和授權詳情。包括認證聲明、屬性聲明和授權決策聲明。
- SAML 協議:定義 IdP 和 SP 之間交換 SAML 斷言的消息格式和規則。
- SAML Binding:定義如何通過不同的通信協議(如 HTTP POST、HTTP Redirect 等)傳輸 SAML 消息。
- SAML 元數據:基於 XML 的文件,包含 IdP 和 SP 的配置信息。包括公鑰、端點和支持的 Bindings,用於在 IdP 和 SP 之間建立信任。
- 單點登入端點:SP 將用戶重定向到 IdP 進行身份驗證的端點。
- 斷言消費者服務 (ACS) URL:在成功驗證後,IdP 將 SAML 斷言發送到的端點。
SAML 如何工作?
- SP 發起的 SSO 流程:
- 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 組件
- 身份提供者 (IdP):驗證用戶並向服務提供者提供身份信息的實體。
- 依賴方 (RP):提供服務並依賴身份提供者驗證用戶的實體。例如,網頁應用、移動應用或 API。
- OIDC 令牌:承載用戶身份信息的令牌。
- OIDC 端點:用於認證和令牌交換的端點。一些最重要的端點有:
- 發現端點:RP 可以從 IdP 獲取公開的 OIDC 配置信息的地方。
- 認證端點:RP 發送認證請求的地方。
- 令牌端點:RP 向授權服務器請求令牌的地方。
- 用戶信息端點:RP 可以檢索用戶的個人檔案信息的地方。
- 範圍:OIDC 定義了一組標準範圍,這些範圍定義了授予 RP 的訪問權限。比如
openid
、profile
、email
、address
等。
OIDC 如何工作?
OIDC 提供多個專門為不同使用場景設計的流程。以下是兩個最常見的 OIDC 流程:
- 認證代碼流程:
認證代碼流程是 OIDC 中針對消費者應用使用最廣泛的流程。
- 客戶端憑據流程:
客戶端憑據流程可用於非用戶基的(機器對機器)認證。
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 比較
方面 | SAML | OIDC |
---|---|---|
令牌格式 | 基於 XML 的 SAML 斷言 | 基於 JSON 的 JWT 令牌 |
主要用例 | 企業 SSO,B2B 整合 | 面向消費者的應用,API 安全 |
易用性 | 複雜,需要深刻理解 XML | 簡單,基於 JSON,易於實施 |
採用 | 企業廣泛採用 | 在現代應用中日益普及 |
安全性 | 成熟但被認為安全性較低 | 現代化,安全性較高 |
靈活性 | 限制,設計用於 SSO 用例 | 靈活,支持多樣的用例 |
SAML 和 OIDC 的未來
SAML 和 OIDC 都被廣泛用於認證和授權目的。
SAML 仍是企業 SSO 和 B2B 整合的基石。其對聯邦身份管理的強大支持和良好的記錄確保其持續的相關性,特別是對於舊系統和大型組織。
另一方面,OIDC 隨著現代應用對安全和可擴展性認證的需求而不斷發展。其輕量性質和與 API 和微服務的對齊使之成為雲原生和分佈式架構的基石。隨著無密碼認證、生物識別和多因素認證 (MFA) 的興起,OIDC 預計將能夠無縫整合新興技術,確保未來幾年的相關性。