簡化開發者的 SAML 認證整合
了解 SAML 是什麼、如何實現 SSO,以及快速整合 SAML 認證成為身份提供者(IdP)或服務提供者(SP)的方法。
單一登入(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 認證。這讓用戶透過單一企業身份登入不同服務。
以下是 IdP 端典型的 SAML SSO 流程:
- 用戶嘗試存取某應用(SP),例如 Salesforce。
- 應用將用戶導向你的 IdP 進行認證。
- 用戶在你 IdP 的登入頁輸入憑證。
- IdP 檢查憑證是否正確。
- 驗證通過後,IdP 向 SP 發送 SAML assertion。
- SP 處理 assertion,確認有效後允許用戶存取。
作為 SAML 服務提供者時
若你的服務是 SP,你將會和多個身份提供者整合,讓用戶能以 SSO 安全高效地進入你的應用,不論來自不同企業或租戶。
以下是 SP 發起的 SSO 流程:
- 用戶嘗試登入你的應用。
- 你的應用產生 SAML 請求並把用戶導向 IdP 的登入頁。
- 用戶在 IdP 登入(或已登入可跳過)。
- IdP 驗證用戶身份,確認後把詳細資料包成 SAML assertion。
- IdP 將 assertion 發回你的應用。
- 你的服務驗證 assertion。如果有效,用戶即可存取你的應用。
SAML SSO 主要參數
想成功整合 SAML SSO,IdP 及 SP 必須互通特定參數,以下為重點:
來自 IdP 的參數
- IdP Entity ID: 在 SAML 通訊中代表 IdP 的唯一識別碼,像數碼名牌。
- SSO URL: 登入端點(URL),SP 導向用戶認證用。
- X.509 憑證: 用於簽署 SAML assertion 的公開金鑰,確保安全。它就像認證的“封印”。
提示:如果你的 IdP 提供 SAML Metadata URL,會更方便。這個 URL 集合了所有所需資訊(例如憑證、SSO URL 和 IdP Entity ID),可以減少人為 copy-paste 出錯,也不用手動更新憑證檔。
來自 SP 的參數
- SP Entity ID: SP 的唯一識別碼,跟 IdP Entity ID 類似。
- Assertion Consumer Service(ACS)URL: SP 預期由 IdP 接收 SAML assertion 的端點。
- RelayState(可選): 用於在 SAML 流程中傳遞數據,例如用戶原本想去的 URL。
SAML 屬性映射及加密
- NameID 格式: 定義用戶識別碼格式(如電郵或用戶名)。
- SAML 屬性: 由 IdP 發送到 SP 的用戶其他資料,如角色、email、部門。
- 舉例:如果 IdP 發送的 SAML assertion 包含
email
([email protected])、role
(admin)、和department
(engineering),SP 可用role
賦予管理員權限,或用department
分組。所以雙方需約定如何映射這些屬性,例如 IdP 用“department”,SP 要求“group”。正確映射可確保資料溝通順暢。 - 加密 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)加強安全性。
- 建立 Logto 應用 前往 Logto Console > 應用程式 建立新 SAML 應用。
- 配置 SAML 參數 以服務提供者(SP)Assertion Consumer Service URL 及 SP Entity ID 設定應用。
- 提供 metadata URL Logto 產生 IdP Metadata URL,讓 SP 可自動獲取 SSO URL 及憑證等必要資訊。
- 進階設定(可選)
- 可建立多條 新憑證(含指紋、到期日),但同時只可啟用一條。
- 按需調整 Name ID 格式。
- 開啟 SAML assertion 加密,貼上 SP 的 x509 憑證即可。
- 屬性映射(可選) 輕鬆自訂跟 SP 分享哪些用戶屬性。
詳細操作請參閱官方文件:SAML App
以 Logto 作為 SAML SP
Logto 可經 SAML 或 OIDC protocol 整合任何企業身份提供者。不論你要做 SP 發起 SSO 統一登入,或 IdP 發起 SSO,流程都十分簡單。
- 建立企業連接器 到 Logto Console > Enterprise SSO 新建企業連接器,協議標準選 SAML。
- 配置 SAML 參數 提供來自 IdP 的 metadata URL 或 metadata XML 檔。如無 metadata,切換到手動配置,輸入 IdP Entity ID、SSO URL 並上傳簽署憑證即可。
- 分享 ACS URL 與 SP Entity ID 把 Logto 的 ACS URL 及 SP Entity ID 傳給 IdP 完成整合。
- 屬性映射(可選) 設置用戶資料對應(如電郵、姓名),確保 IdP 與 Logto 資訊對齊。
- 新增企業郵箱域名 在企業連接器的 “SSO 體驗” 標籤下加入一個或多個 email 域名,僅允許這些域名的用戶經 SSO 登入。
- 開啟 IdP 發起的 SSO(可選) 只有當企業客戶有需要才開啟此功能。它讓用戶能從 IdP 控制台直接登入你的應用。
詳細操作請參閱官方文件:Enterprise SSO documentation。
結語
SAML 提供了一個標準且安全的 SSO 認證方法,讓流程更順暢。Logto 簡化了 SAML 整合,無論你用它作 IdP 或 SP。Logto 提供易用介面並同時支援 雲端 和 開源 版本,助你輕鬆處理各種 SAML 認證複雜情境。只需簡單配置幾個參數,即可將服務與任意 SAML IdP 或 SP 接通,全心為你的用戶打造更優秀的體驗。