SAML(安全断言标记语言)是企业中最常用的身份验证协议和 SSO 解决方案。
什么是单点登录?
简而言之,它相当于我们在互联网应用程序中看到的“使用 Google 登录”或“使用 Facebook 登录”按钮的企业版按钮。我们最初在 Google 或 Facebook 等中注册一个帐户,然后使用该帐户登录其他应用程序,如 Spotify、Netflix、Zoom 等。我们这样做是为了避免维护多个用户名/密码。同样,企业维护单一的用户管理系统,员工使用其公司帐户登录第三方服务,如 Salesforce、Workday、Expensify 等,而无需创建单独的帐户或记住多个密码。这称为 SSO(单点登录),SAML 是事实上的企业 SSO 解决方案。
参与者
SAML 身份验证流程涉及 3 个主要参与者:
身份提供商 (IdP)
这就是我们前面讲的集中式用户管理系统。该服务器负责验证用户身份并将用户详细信息(例如电子邮件地址、姓名、部门等)传递给服务提供商。流行的身份提供商有 Azure AD、Auth0、Onelogin、Okta、G Suite 等。
服务提供商 (SP)
这是信任 IdP 并希望使用它进行身份验证的应用程序。示例:Salesforce、Workday、Expensify、$YOUR_AWESOME_APP 等
Principal
这是尝试通过 IdP 登录 SP 的用户。
身份验证流程
用户访问SP的常见方式有两种:
IdP 发起登录:
用户首先访问 IdP,然后会看到他们有权访问的 SP 列表。从该列表中选择 SP 后,他们将被重定向到该 SP。
SP发起登录:
在这个流程中,用户首先访问SP的网站。如果用户与 SP 没有活动会话,则用户将被重定向到 IdP 进行身份验证。成功登录后,用户将被重定向回 SP。我们将详细讨论这个流程。
SP发起的流程:
我们从用户的角度来谈谈流程。
- 用户访问 SP 的网站。如果用户未登录,则会显示“使用 SSO 登录”按钮
- 单击登录按钮后,用户将被重定向到 IdP 的网站,并要求他们提交凭据
- 成功登录后,用户将被重定向回 SP 的网站,他们可以在其中执行工作
现在,让我们放大一点,了解幕后发生的事情:
- SP 检查活动会话
- SP 向 IdP 发送 AuthnRequest
- IdP 对用户进行身份验证
- IdP 向 SP 发送 SAML 断言
- SP 创建会话并登录用户
SP 检查活动会话
SAML 不维护会话,因此 SP 需要为每个经过身份验证的用户维护会话。当用户访问 SP 网站时,它会检查用户是否与其有活动会话。如果存在活动会话,用户可以进入网站,否则会显示“使用 SSO 登录”按钮。
SP 向 IdP 发送 AuthRequest
当用户单击“使用 SSO 登录”按钮时,SP 会生成一条名为“AuthnRequest”的 XML 消息,其中包含有关发送请求的详细信息(颁发者)、用户经过身份验证后重定向到的位置(断言消费者服务 url)以及安全措施(ID、IssueInstant)。下面是AuthnRequest XML 示例。
此 XML 被编码为 url 安全字符串,作为查询参数嵌入到对 IdP 的请求中,并且用户被重定向到此 IdP url:
https://idp.com/SAML2/SSO/Redirect?SAMLRequest=EncodedAuthnRequest
IdP 对用户进行身份验证
IdP 维护自己的有关用户的会话,如果用户存在活动会话,则用户将被重定向到 SP。如果会话不存在,系统会要求用户输入其凭据。 IdP 可以选择如何对用户进行身份验证 – 可以是用户名/密码、TOTP、MFA 等。
IdP 向 SP 发送 SAML 断言
用户成功通过身份验证后,IdP 会将名为“SAML 断言”的 XML 消息发送回 SP 的断言消费者服务 URL。其中包含用户的详细信息,例如姓名、电子邮件、部门等以及安全措施(InResponseTo、IssueInstant)。它还经过数字签名,因此 SP 可以相信该消息确实来自 IdP 并将用户登录到其系统。
SP 创建会话并登录用户
用户现已成功登录SP网站! SP 将为用户创建一个会话,以便用户下次访问该网站时可以自动登录。
结论
希望这篇文章能够为您提供 SAML 身份验证以及 SSO 工作原理的高级概述。
没有回复内容