了解安全断言标记语言 (SAML)
了解安全断言标记语言 (SAML)
本文最初发表于 https://www.learncsdesign.com
安全断言标记语言 (SAML) 提供了两个重要功能:跨域单点登录 (SSO) 和身份联合。许多企业采用了 SAML 2.0,因为它允许员工、客户和合作伙伴使用的应用程序将用户身份验证委托给集中的企业身份提供者。企业现在能够集中管理和控制身份。
大型企业客户可能希望您的应用程序支持 SAML 2.0 身份验证。
SAML 是一个基于 XML 的框架,用于在在线业务合作伙伴之间交换安全信息。使用 SAML,应用程序可以将身份验证委托给称为身份提供者的远程实体。身份提供者将带有已验证用户和已验证事件信息的断言返回给应用程序。
同样,如果用户访问将身份验证委托给同一身份提供者的另一个应用程序,则用户不必再次登录。它被称为单点登录 (SSO)。
SAML 还为应用程序和身份提供者提供了一种机制,以使用共同共享的标识符交换有关用户的信息。这称为联合身份。联合身份可以跨系统使用相同的标识符,也可以使用不透明的内部标识符,该标识符映射到每个系统中用户使用的标识符。
SAML 术语
SAML 定义了以下术语:
- 主题 — 将交换安全信息的实体。
- SAML 断言 — 有关主题的安全信息包含在基于 XML 的消息中。
- SAML 配置文件 — 将 SAML 消息用于业务用例的规范,例如跨域单点登录。
- 身份提供者 — 身份提供者是在跨域单点登录的上下文中发布关于已验证主题的 SAML 断言的服务器。
- 服务提供者 — 服务提供者将身份验证委托给身份提供者,并依赖于身份提供者在跨域单点登录上下文中发布的 SAML 断言中有关已验证主题的信息。
- 信任关系 — SAML 服务提供者和 SAML 身份提供者之间的协议,其中服务提供者信任身份提供者发布的断言。
- SAML 协议绑定 — 描述如何将 SAML 消息元素映射到标准通信协议(例如 HTTP)上,以便在服务提供者和身份提供者之间进行传输。
SAML 的工作原理
最常见的 SAML 场景之一是跨域 Web 单点登录。在这种情况下,主体是希望使用应用程序的用户。该应用程序充当 SAML 服务提供者。应用程序将用户身份验证委托给可能位于不同安全域中的 SAML 身份提供者。在对用户进行身份验证后,身份提供者会返回一个安全令牌,称为 SAML 断言。 SAML 断言提供有关身份验证事件和经过身份验证的主题的信息。
拥有服务提供商(应用程序)和身份提供商的组织会交换元数据,以启用跨域 Web 单点登录。元数据信息包括用于验证数字签名消息的 URL 端点和证书。可以使用此数据在两方之间交换消息。在身份提供者可以为服务提供者认证用户之前,必须在服务提供者和身份提供者之间配置和建立信任关系。
一旦设置了提供者的相互配置,服务提供者(应用程序)就会使用 SAML 身份验证请求将用户的浏览器重定向到身份提供者。在身份提供者对用户进行身份验证后,将向应用程序发送回 SAML 身份验证响应消息。在响应中,包含有关用户和身份验证事件的信息的 SAML 断言,或者如果发生错误条件,则包含错误。
应用程序(服务提供商)发起的 SSO
- 用户访问服务提供商(应用程序)。
- 用户的浏览器通过 SAML 身份验证请求重定向到身份提供者。
- 在身份验证期间,身份提供者与用户交互。
- 用户进行身份验证,身份提供者验证凭据。
- 通过 SAML 响应,身份提供者将用户的浏览器重定向回服务提供者。响应被发送到服务提供者的断言消费者服务 (ACS) URL。
- 一旦服务提供者收到 SAML 响应,它就会使用并验证它并响应用户的原始请求。
单点登录
在上一节中,我们看到用户访问单个应用程序。多个服务提供者可以将用户身份验证委托给同一个身份提供者。在这种情况下,用户可以访问第一应用程序并向身份提供者进行身份验证以建立身份验证会话。通过使用相同的浏览器,用户可以访问依赖于相同身份提供者的第二个应用程序,并且身份提供者将识别出用户已经有会话并且不会要求他们再次进行身份验证。通过成功的 SAML 身份验证响应,身份提供者将简单地将用户的浏览器重定向回应用程序。这称为单点登录。
身份提供者发起的流程
前面的部分展示了从服务提供商开始与用户的交互序列。之所以称为 SP-Initiated,是因为用户发起了交互。
SAML 还定义了另一个流程,称为 IdP 发起的流程,用户从身份提供者开始。在这种情况下,身份提供者将用户的浏览器重定向到服务提供者,而服务提供者无需发送身份验证请求。当用户访问应用程序时,具有企业门户的企业环境使用此流程。
当用户首次访问企业门户时,他们会被重定向到企业身份提供者。登录后,用户会在门户上看到应用程序链接菜单。单击其中一个链接后,用户将被重定向到身份提供者,其中应用程序 URL 作为参数。与 SP 启动的情况一样,身份提供者检测到用户已经拥有经过身份验证的会话,并将用户的浏览器重定向到应用程序。在企业中,由 IdP 发起的带有门户的流程非常有用,因为它支持单点登录并确保用户被定向到每个应用程序的正确 URL,从而降低了网络钓鱼的可能性。
- 用户访问公司门户。
- 用户的浏览器通过 SAML 身份验证请求重定向到身份提供者。
- 为了对用户进行身份验证,身份提供者与用户进行交互。
- 在用户进行身份验证后,身份提供者会验证凭据。
- 包含身份验证断言的门户的 SAML 响应由身份提供者返回到用户的浏览器。一旦用户登录门户,就会向用户显示应用程序列表。
- 用户在门户中单击应用程序链接。用户的浏览器被引导到具有指定所需服务提供者应用程序的参数的身份提供者。 IdP 检查用户的会话。
- 用户的浏览器被重定向到服务提供商的断言消费者服务 (ACS) URL,并带有新的 SAML 响应。
- 假设用户的身份和权限足够,服务提供商会根据 SAML 响应和身份验证断言为用户呈现适当的页面。
身份联合
在 SAML 中,服务提供者和身份提供者之间使用商定的标识符来引用主题。它允许服务提供者将身份验证委托给身份提供者,并接收带有身份声明的身份验证断言,其中包括服务提供者可识别的已验证主题的标识符。
服务提供者的身份可以以不同的方式链接到身份提供者的身份。通常,服务提供商和身份提供商都将用户的电子邮件地址用作标识符,但这可能会出现问题,因为用户可能需要更改他们的电子邮件地址,并且可能与隐私要求相冲突。在请求中,可以动态请求标识符属性,或者可以将服务提供者配置为发送标识符。用户的个人资料也可以通过不透明的用户内部标识符映射到双方,该标识符可用于在身份提供者和服务提供者之间交换信息。每个联盟都有自己的唯一标识符,这可以防止用户活动的关联并保护隐私。当两方交换元数据并配置他们的基础设施时,他们会在服务提供者和身份提供者之间建立一种关系(在实践中通常称为联合)。
身份验证代理
应用程序可以通过身份验证代理轻松支持多种身份验证协议和机制。如果您正在构建使用 OIDC 进行身份验证的新应用程序,您可能会收到来自希望通过其公司 SAML 身份提供者对其用户进行身份验证的企业客户的支持 SAML 的请求。
使用身份验证代理,您可以实现更新的身份协议,如 OIDC,并通过不同的协议与各种身份提供者进行通信。
概括
SAML 2.0 标准为网络上的单点登录和身份联合提供了行业标准的解决方案。由于这些关键功能,企业能够使用云应用程序并仍然保持对其身份的集中控制。通过使用 SAML,用户可以避免将静态密码凭证暴露给应用程序并受益于单点登录的便利性。
与 OIDC 相比,SAML 是一种较旧的协议。目前,围绕 API 构建的现代应用程序将受益于实现 OIDC 和 OAuth 2.0,它们分别支持身份验证和授权。支持这些协议的身份提供者可用于消费者和企业场景。
如果你喜欢这篇文章,别忘了鼓掌。如果你想连接,你可以找到我 领英 .
参考
书籍 — 解决现代应用程序中的身份管理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明