企业 SSO 单点登录全解析:基于 SAML 协议的身份验证流程与实现原理

141 阅读3分钟

企业维护一个单一的用户管理系统,员工使用他们的公司帐户登录第三方服务。SSO (Single Sign On)

SAML(安全断言标记语言)是企业中最常用的身份验证协议和 SSO 解决方案。

主要参与者

  • Identity Provider (IdP)  身份提供商

此服务器负责对用户进行身份验证,并将用户详细信息(如电子邮件地址、姓名、部门等)传递给服务提供商。常见的身份提供商包括 Azure AD、Auth0、Onelogin、Okta、G Suite 等。

  • Service Provider (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 的网站,他们可以在其中执行其工作

image.png

SP 详细步骤
SP 检查活动会话

image.png

SP 向 IdP 发送 AuthnRequest

当用户单击“使用 SSO 登录”按钮时,SP 会生成一条名为“AuthnRequest”的 XML 消息,其中包含有关发送请求的人员(颁发者)、用户通过身份验证后重定向到何处(断言消费者服务 url)和安全措施(ID、IssueInstant)的详细信息。

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,并将用户登录到他们的系统。

image.png

SP 创建会话并登录用户

用户现在已成功登录到 SP 的网站!SP 将为用户创建一个会话,以便用户可以在下次访问网站时自动登录。