什么是 SAML?
SAML 是 Security Assertion Markup Language(安全断言标记语言)的缩写。它在网络安全中的主要作用是:让你使用一套登录凭证访问多个 Web 应用程序。其工作原理是在两个参与方之间(通常是身份提供商 [IdP] 和 Web 应用程序)以特定格式传递身份验证信息。
SAML 是什么?它是如何工作的?
SAML 是一种用于身份验证的开放标准,基于 可扩展标记语言(XML) 格式。Web 应用程序使用 SAML 在 身份提供商(IdP) 和 服务提供商(SP) 之间传输身份验证数据。
在 SAML 出现之前,单点登录(SSO)虽然可以实现,但依赖于仅在同一域名内有效的 Cookie。SAML 的诞生正是为了解决跨域访问多个独立 Web 应用时的身份验证难题。
SAML 通过将用户身份验证集中到一个身份提供商来实现这一目标。Web 应用(即服务提供商)可以借助该 IdP 来授权用户访问。这种方式意味着:
- 用户无需记住多个用户名和密码;
- 服务提供商无需存储(通常较弱且不安全的)用户密码,也无需处理“忘记密码”等问题,从而提升了自身平台的安全性。
SAML 的优势
由于具备诸多优点,SAML 已成为企业广泛采用的解决方案:
- 提升用户体验:只需登录一次,即可访问多个 Web 应用。不仅加快了认证流程,还只需记住一套凭证。
- 减少 IT 支持负担:组织因此收到的密码重置求助电话大幅减少。
- 增强安全性:
- 所有登录信息由身份提供商统一存储,服务提供商无需保存任何用户凭证。
- 身份提供商专注于提供安全的身份验证服务,具备规模效应,能投入更多资源实施多层安全措施(例如内置多因素认证 MFA),有效防御常见的密码攻击。
SAML 是如何工作的?
SAML 通过在身份提供商(IdP)和服务提供商(SP)之间交换用户信息(如登录状态、标识符及其他相关属性)来简化并保障认证过程。用户只需使用一套凭证登录一次,之后访问其他应用时无需重复输入账号密码。
现实类比:登机流程
想象一下航空公司的登机流程:
- 航空公司(服务提供商)需要确认你是你本人,以保障航班安全。
- 为此,他们会查验你出示的政府签发的带照片身份证件(如护照或驾照)。
- 只要证件上的姓名与机票一致,且证件真实有效,你就被允许登机。
在这个例子中:
- 政府 = 身份提供商(IdP)
- 航空公司 = 服务提供商(SP)
- 你的身份证 = SAML 断言(SAML Assertion)
当你申请身份证时,需填写表格、拍照,有时还需录指纹。政府将这些身份信息存入数据库,并发放一张关联你身份的实体证件。登机时,航空公司检查这张证件(即 SAML 断言),确认无误后即放行。
什么是 SAML 单点登录(SAML SSO)?
SAML 单点登录(SAML SSO)是一种利用 SAML 技术实现的机制:用户只需登录一次身份提供商,即可无缝访问多个 Web 应用。
对用户而言,SAML SSO 更易用、更安全——只需记住一套凭证;访问每个应用时不会反复弹出登录框,而是通过点击图标或直接访问 URL 即可进入。
此外,SAML SSO 还带来以下好处:
- 提升生产力:用户无需在多个系统间重复登录;IT 帮助台也不再被大量密码重置请求淹没。
- 降低成本:帮助台处理的呼叫减少;企业无需自行开发和维护本地认证系统,可直接集成第三方 IdP。
OAuth 与 SAML 有何区别?
OAuth 和 SAML 都是用于访问控制的协议,但核心区别在于:
- SAML 用于身份验证(Authentication) —— “你是谁?”
- OAuth 用于授权(Authorization) —— “你能做什么?”
继续用登机类比:
- 你的 身份证(SAML 断言) 用于验证身份(是否可登机);
- 你的 机票(OAuth 令牌) 用于确定权限(坐经济舱还是头等舱,享受哪些服务)。
SAML 工作流程示例
SAML 采用基于声明(claims-based)的身份验证流程。以下是典型步骤:
- 用户在浏览器中访问某个使用 SAML 的 Web 应用(SP)。
- 应用返回一个 SAML 认证请求。
- 浏览器将该请求转发给身份提供商(IdP)。
- IdP 解析请求。
- IdP 对用户进行身份验证(如提示输入用户名/密码或多因素认证)。若用户已登录,则跳过此步。
- IdP 生成 SAML 响应,并返回给用户的浏览器。
- 浏览器将 SAML 响应发送回 SP。
- SP 验证该响应;若成功,则授予用户访问权限。
SAML 开发教程与工具
OneLogin 为开发者提供了多种 SAML 工具包,帮助你:
- 为自己的应用启用基于 IdP 的 SSO;
- 将应用加入 OneLogin 应用目录;
- 编写支持 OneLogin SSO 的代码;
- 获取最佳实践和常见问题解答。
此外,OneLogin 还提供在线工具网站 https://www.samltool.com,包括:
- 生成用于测试环境的自签名 X.509 证书;
- Base64 与 XML 互转编码/解码;
- XML 节点加密、AuthNRequest 签名;
- SAML XML 与 XSD 模式校验;
- 构建 IdP 元数据;
- 从 SAML 响应中提取 NameID 和其他属性;
- 将 SAML/XML 消息转换为人类可读格式。