Logo Logo
GitHub Designed by Logto

什麼是 SAML?

SAML(通常稱為 SAML 2.0)是一種基於 XML 的標準,用於在兩方之間交換認證 (authentication) 和授權 (authorization) 數據: 身分提供者 (Identity provider, IdP) 服務提供者 (Service provider, SP) 。它被廣泛用於身份聯合和 Enterprise SSO 解決方案。

如同名稱所示,SAML 傳遞關於使用者身份和屬性的斷言。這些斷言被數位簽名並可選擇加密以確保其完整性和機密性。

SAML 如何運作?

在深入了解 SAML 認證 (authentication) 流程之前,我們需要了解身份提供者和服務提供者如何識別和信任彼此。這種信任是通過元數據交換建立的,雙方分享以下信息:

  • Entity ID: 一個用於身份提供者或服務提供者的唯一標識符。
  • Public key: 用於驗證 SAML 斷言中的數位簽名。
  • Endpoints: 不同 SAML 操作的 URL,如認證請求和響應。

一旦建立了信任,SAML 認證 (authentication) 流程就可以進行:

RelayState

在 SAML 流程中,RelayState 參數用於在認證 (authentication) 過程中維持使用者的狀態。它作為使用者在重定向到身份提供者前的原始請求的參考。服務提供者可以使用此參數在成功認證 (authentication) 後將使用者重定向回原始頁面或資源。

RelayState 還用於防止 跨站請求偽造 (Cross-site request forgery, CSRF) 攻擊,通過確保使用者在認證 (authentication) 後被重定向回正確的頁面。

SAML 斷言

SAML 斷言是 SAML 協議的核心組件。它們包含有關使用者身份、屬性和認證 (authentication) 狀態的信息。有三種類型的 SAML 斷言:

  • 認證 (Authentication) 斷言: 表示使用者已由身份提供者認證 (authenticated)。
  • 屬性斷言: 包含關於使用者的其他信息,如角色、權限和個人資料數據。
  • 授權決策斷言: 指定使用者對特定資源的訪問權。

採用 SAML 的考慮因素

自 2000 年代初SAML 被廣泛採用於企業環境中。在為你的應用程序採用 SAML 時,這裡有一些關鍵考慮因素:

  • 複雜性:與現代框架如 OAuth 2.0 OpenID Connect (OIDC) 相比,SAML 集成可能會較為複雜。
  • 傳輸效率:由於 XML 格式,SAML 消息可能較大,這可能影響網絡性能。
  • 安全性:SAML 斷言必須防止篡改和竊聽。確保你的 SAML 實現遵循最佳加密和數位簽名做法。

儘管有這些考慮因素,SAML 仍然是一個強大且被廣泛使用的標準,用於企業環境中的安全身份聯合和單一登入解決方案。然而,對於新的應用程序或服務,你可能想考慮像 OAuth 2.0 和 OpenID Connect 這樣的現代替代方案,以獲得更輕量級和開發者友好的認證 (authentication) 和授權 (authorization) 方法。

另見