到目前為止,我們已經看過 OAuth2(授權) 與 OIDC(認證)。今天,我們要認識另一個「身分驗證標準」:SAML(Security Assertion Markup Language)。
它是許多企業在做 SSO(Single Sign-On,單一登入) 的時候常用的技術。
SAML 的角色與 OAuth/OIDC 不同,但概念上可以對照:
角色 | SAML 名稱 | 對應 OIDC / OAuth | 說明 |
---|---|---|---|
使用者 | Principal | Resource Owner | 需要登入的人 |
身分提供者 | IdP (Identity Provider) | Authorization Server | 負責認證的系統(例如 AD FS、Okta) |
服務提供者 | SP (Service Provider) | Client | 想要依賴登入結果的應用(例如 Salesforce) |
SAML 的核心是 Assertion(斷言):一段 XML,通常包含:
這份斷言由 IdP 簽名(XML Signature),交給 SP,讓 SP 確認「這個人確實已經登入過」。
整體來說SAML有許多建立的流程,目前最常見的是 Web Browser SSO Profile:
使用者存取 SP
SP 轉送到 IdP
IdP 驗證使用者
IdP 回傳 Assertion
SP 驗證 Assertion
與 OAuth/OIDC 的「Redirect + Token」不同,SAML 主要透過 瀏覽器 POST XML 來回傳訊息。
特性 | SAML | OIDC |
---|---|---|
格式 | XML | JSON / JWT |
常見用途 | 企業 SSO | Web / 行動登入 |
認證方式 | Assertion(XML) | ID Token(JWT) |
生態圈 | 傳統企業應用(SAP、AD、Jira…) | 現代 SaaS、行動 App |
使用難度 | 配置複雜(XML + 簽章驗證) | 較簡單(JSON、Discovery、自動化工具多) |
簡單說:
假設你的公司用 Okta 當 IdP,並且買了 Salesforce 作為 CRM:
今天我們認識了 SAML:
明天,我們將進一步探討 Spring Security 整合 SAML 的觀念,看看如何在 Spring Boot 中讓應用成為 SAML 的 Service Provider。
我們明天見!