繁體中文(香港)
  • SAML
  • SSO
  • 身份提供者

簡化開發者的 SAML 認證整合

了解 SAML 是什麼、如何實現 SSO,以及快速整合 SAML 認證成為身份提供者(IdP)或服務提供者(SP)的方法。

Ran
Ran
Product & Design

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

單一登入(SSO) 是現代應用程式的關鍵,而SAML 則讓企業身份系統之間的認證變得安全且友好。這份指南以簡單明確的步驟和實用案例,幫助開發者與設計師更高效地實現 SAML。

什麼是 SAML 認證和 SAML 應用?

安全性聲明標記語言(SAML) 是一套基於 XML 的標準,用於兩大關鍵角色之間交換認證和授權資訊:身份提供者(IdP) 以及 服務提供者(SP)。它是企業常見的單一登入(SSO)解決方案,讓企業用戶只需一次登入即可存取多個應用,大大提升便利性。

身份提供者(IdP) 負責管理和驗證用戶憑證(例如用戶名和密碼)。當用戶嘗試進入受保護的服務時,IdP 會確認他們的身份並通知該服務。

  • 舉例說明: 假設你在一間使用 Microsoft Azure AD 來管理員工帳號的大公司工作。當你登入 Salesforce 時,Azure AD 就是 IdP,負責檢查你的憑證並告知 Salesforce 你已授權。

服務提供者(SP) 指用戶真正想存取的應用或服務,它會依賴 IdP 處理認證。

  • 舉例說明: 承接上文,Salesforce 就是 SP。它依賴 Microsoft Azure AD(IdP)確認你的身份。一旦 Azure AD 保證你是本人,Salesforce 就會讓你登入。

當大家談到“SAML 應用”時,通常是指 SP。

使用 SAML 協定,你可以把服務設為 IdP,支持應用整合(如 Azure AD / Google Workspace);或將服務設為 SP(如 Salesforce / Slack),為用戶提供 SSO。

SAML Assertions 是 SAML 協定的核心。它是一張由 IdP 產生並發送給 SP 的數碼“便條”,意思是:“我已確認這個用戶的身份。”接下來會說明 IdP 和 SP 的流程。

作為 SAML 身份提供者時

當你的服務作為 IdP 時,你可以讓多個應用都支援 SAML 認證。這讓用戶透過單一企業身份登入不同服務。

as_saml_identity_provider_idp.png

以下是 IdP 端典型的 SAML SSO 流程:

  1. 用戶嘗試存取某應用(SP),例如 Salesforce。
  2. 應用將用戶導向你的 IdP 進行認證。
  3. 用戶在你 IdP 的登入頁輸入憑證。
  4. IdP 檢查憑證是否正確。
  5. 驗證通過後,IdP 向 SP 發送 SAML assertion。
  6. SP 處理 assertion,確認有效後允許用戶存取。

作為 SAML 服務提供者時

若你的服務是 SP,你將會和多個身份提供者整合,讓用戶能以 SSO 安全高效地進入你的應用,不論來自不同企業或租戶。

as_saml_service_provider_sp.png

以下是 SP 發起的 SSO 流程:

  1. 用戶嘗試登入你的應用。
  2. 你的應用產生 SAML 請求並把用戶導向 IdP 的登入頁。
  3. 用戶在 IdP 登入(或已登入可跳過)。
  4. IdP 驗證用戶身份,確認後把詳細資料包成 SAML assertion。
  5. IdP 將 assertion 發回你的應用。
  6. 你的服務驗證 assertion。如果有效,用戶即可存取你的應用。

SAML SSO 主要參數

想成功整合 SAML SSO,IdP 及 SP 必須互通特定參數,以下為重點:

來自 IdP 的參數

  1. IdP Entity ID: 在 SAML 通訊中代表 IdP 的唯一識別碼,像數碼名牌。
  2. SSO URL: 登入端點(URL),SP 導向用戶認證用。
  3. X.509 憑證: 用於簽署 SAML assertion 的公開金鑰,確保安全。它就像認證的“封印”。

提示:如果你的 IdP 提供 SAML Metadata URL,會更方便。這個 URL 集合了所有所需資訊(例如憑證、SSO URL 和 IdP Entity ID),可以減少人為 copy-paste 出錯,也不用手動更新憑證檔。

來自 SP 的參數

  1. SP Entity ID: SP 的唯一識別碼,跟 IdP Entity ID 類似。
  2. Assertion Consumer Service(ACS)URL: SP 預期由 IdP 接收 SAML assertion 的端點。
  3. RelayState(可選): 用於在 SAML 流程中傳遞數據,例如用戶原本想去的 URL。

SAML 屬性映射及加密

  1. NameID 格式: 定義用戶識別碼格式(如電郵或用戶名)。
  2. SAML 屬性: 由 IdP 發送到 SP 的用戶其他資料,如角色、email、部門。 - 舉例:如果 IdP 發送的 SAML assertion 包含 email[email protected])、role(admin)、和 department(engineering),SP 可用 role 賦予管理員權限,或用 department 分組。所以雙方需約定如何映射這些屬性,例如 IdP 用“department”,SP 要求“group”。正確映射可確保資料溝通順暢。
  3. 加密 assertions(可選): 為保障敏感認證資料,SAML assertions 可加密。
    • IdP 角色: 用 SP 的公開金鑰加密 assertion。
    • SP 角色: 用自己的私鑰解密 assertion,取得用戶資料。

現在你已掌握設置 SAML 連接的關鍵資訊。例如,要把 Salesforce(SP)和 Azure AD(IdP)整合:

  • 從 Azure AD 取得 IdP Entity ID、SSO URL 和憑證,填入 Salesforce。
  • 將 Salesforce 的 SP Entity ID 和 ACS URL 提供給 Azure AD。

Logto 讓 SAML 整合更簡單

Logto 可扮演 IdP 或 SP 支援應用使用 SAML SSO。

以 Logto 作為 SAML IdP

Logto 讓其他應用信任其進行聯邦身份認證,並可支援多重認證(MFA)加強安全性。

  1. 建立 Logto 應用 前往 Logto Console > 應用程式 建立新 SAML 應用。
  2. 配置 SAML 參數 以服務提供者(SP)Assertion Consumer Service URLSP Entity ID 設定應用。
  3. 提供 metadata URL Logto 產生 IdP Metadata URL,讓 SP 可自動獲取 SSO URL 及憑證等必要資訊。
  4. 進階設定(可選)
    • 可建立多條 新憑證(含指紋、到期日),但同時只可啟用一條。
    • 按需調整 Name ID 格式
    • 開啟 SAML assertion 加密,貼上 SP 的 x509 憑證即可。
  5. 屬性映射(可選) 輕鬆自訂跟 SP 分享哪些用戶屬性。

logto_saml_apps_saml_providers.png

詳細操作請參閱官方文件:SAML App

以 Logto 作為 SAML SP

Logto 可經 SAML 或 OIDC protocol 整合任何企業身份提供者。不論你要做 SP 發起 SSO 統一登入,或 IdP 發起 SSO,流程都十分簡單。

  1. 建立企業連接器Logto Console > Enterprise SSO 新建企業連接器,協議標準選 SAML。
  2. 配置 SAML 參數 提供來自 IdP 的 metadata URLmetadata XML 檔。如無 metadata,切換到手動配置,輸入 IdP Entity ID、SSO URL 並上傳簽署憑證即可。
  3. 分享 ACS URL 與 SP Entity ID 把 Logto 的 ACS URLSP Entity ID 傳給 IdP 完成整合。
  4. 屬性映射(可選) 設置用戶資料對應(如電郵、姓名),確保 IdP 與 Logto 資訊對齊。
  5. 新增企業郵箱域名 在企業連接器的 “SSO 體驗” 標籤下加入一個或多個 email 域名,僅允許這些域名的用戶經 SSO 登入。
  6. 開啟 IdP 發起的 SSO(可選) 只有當企業客戶有需要才開啟此功能。它讓用戶能從 IdP 控制台直接登入你的應用。

logto-enterprise-saml-sso.png

詳細操作請參閱官方文件:Enterprise SSO documentation

結語

SAML 提供了一個標準且安全的 SSO 認證方法,讓流程更順暢。Logto 簡化了 SAML 整合,無論你用它作 IdP 或 SP。Logto 提供易用介面並同時支援 雲端開源 版本,助你輕鬆處理各種 SAML 認證複雜情境。只需簡單配置幾個參數,即可將服務與任意 SAML IdP 或 SP 接通,全心為你的用戶打造更優秀的體驗。