SAML 身份验证的直观说明
SAML(安全断言标记语言)是企业中最常用的身份验证协议和 SSO 解决方案。
什么是 SSO?
简而言之,它相当于我们在互联网应用程序中看到的“Login with Google”或“Login with 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 等
主要
这是尝试通过 IdP 登录 SP 的用户。
身份验证流
用户有两种常见的 SP 访问方式:
IdP 发起登录:
用户首先转到 IdP,然后显示他们有权访问的 SP 列表。从该列表中选择 SP 后,他们将被重定向到该 SP。
SP 发起登录
在此流程中,用户首先转到 SP 的网站。如果用户没有与 SP 的活动会话,则用户将被重定向到 IdP 进行身份验证。成功登录后,用户将被重定向回 SP。我们将详细讨论此流程。
SP 启动的 Flow:
让我们从用户的角度来谈谈流程。
用户转到 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 Assertion”的 XML 消息发回 SP 的断言使用者服务 URL。这包含用户的详细信息,例如姓名、电子邮件、部门等和安全措施(InResponseTo、IssueInstant)。
它还经过数字签名,因此 SP 可以相信消息确实来自 IdP,并将用户登录到他们的系统。
SP 创建会话并登录用户
用户现在已成功登录到 SP 的网站!SP 将为用户创建一个会话,以便用户可以在下次访问网站时自动登录。
结论
希望这篇文章能够为您提供 SAML 身份验证以及 SSO 工作原理的高级概述。
感谢阅读!:)