由 AI 翻译,尚未经过社区审校。 阅读英文版

博客 · 2023年9月26日 · Steve Simpson · 身份

深入理解 SAML 认证

理解 Salesforce 单点登录中的 SAML

在认证领域,SAML(安全断言标记语言)在确保跨应用无缝访问方面发挥着关键作用。我们来深入了解 SAML,理解它在单点登录(SSO)中的意义,并探讨它在 Salesforce 中的实现。

设定背景

设想这样一个场景:你有两个 Salesforce org:一个身份提供商(IDP)和一个服务提供商。服务提供商拥有你想访问的数据,但你不想使用多套凭据,而是希望用一套登录信息就做到。这个概念听起来很简单,但幕后的机制可能相当复杂。

图示:从一个 Salesforce org 单点登录到另一个。浏览器带着一个 SAML 请求被发送到身份提供商 org,再带着一个 SAML 断言回到服务提供商 org;每个 org 都持有对方的证书,用户通过联合 ID 进行匹配

SAML 领域中的关键术语

**用户访问:**用户在认证之前试图访问服务提供商上的一个受保护资源。

**重定向:**如果用户没有通过认证,服务提供商会用一个 SAML 请求把他们重定向到身份提供商。如有需要,还可能一并发送一个中继状态(relay state,即用户最初想访问的 URL)。

**IDP 认证:**身份提供商验证用户的身份,通常通过用户名、密码或多重身份验证。

**SAML 断言:**认证之后,IDP 向服务提供商发送一个 SAML 断言。

**服务提供商信任:**服务提供商验证 SAML 断言,提取用户信息,并授予访问权限。如果之前提供了中继状态,服务提供商会导航到那个特定的 URL。

SAML 总结:基本工作流程(用户访问、重定向、认证、断言、重定向回来、授予访问权限)、优点和关键术语

单点登录的好处

**简化访问:**用户只需要一套凭据就能访问多个服务。

**安全:**SAML 使用数字签名来确保数据完整性并防止篡改。

**互操作性:**作为一个标准协议,SAML 可以与不同技术栈上的各种 IDP 和服务提供商对接。

更深入一步:研究 SAML 流程

**SAML 请求:**由服务提供商向 IDP 发起,请求它认证一个用户。

从服务提供商 org 发往身份提供商 org 的 SAML 请求(AuthnRequest)示例

**SAML 响应:**IDP 在认证之后发出的一条消息,封装了关于用户的详细信息。

来自身份提供商的 SAML 响应示例,带有签发者和数字签名

**断言:**这些是 IDP 关于用户的声明,包含用户名或电子邮件等属性。

**数字签名:**用来验证断言,确保它们没有被非法篡改。

**中继状态:**一个深度链接 URL,确保用户在认证之后被重定向回最初想去的地方。

当用户发起访问时,一个 SAML 请求被发送给 IDP,IDP 验证之后会发回一个 SAML 断言。这个断言经服务提供商验证后,就为用户提供了想要的访问权限。

时序图:由服务提供商发起的 SAML 登录。用户请求一个页面,被重定向到身份提供商登录,带着一个 SAML 断言回来,服务提供商验证它并创建一个会话

借助浏览器上的 SAML Tracer 等工具,可以把这个流程可视化。这让认证过程一目了然,从最初的请求到认证之后的最终重定向。

SAML 断言中的安全措施

为了应对潜在的安全威胁:

时间戳用来防止重放攻击,确保 SAML 断言只在很短的时间窗口内有效。

数字签名保证数据在交换过程中没有被篡改。

此外,断言可能包含用户属性,比如电子邮件地址或用户类型,让服务提供商一侧可以进行更细致的访问控制。

结论

SAML 的核心是一个基于 XML 的协议,包含认证所需的关键元素。虽然它看起来像魔法,但它是精心设计的技术的成果,旨在挫败“中间人”攻击或重放攻击之类的场景。

它能够把多个服务提供商与不同技术栈的 IDP 集成在一起,这使它成为数字认证世界的一块基石。

敬请关注

满怀信心地开启你的 Salesforce 身份之旅吧!想获得更多见解和技巧,请继续关注 www.SteveTechArc.com 和 YouTube 频道 @SteveTechArc (opens in a new tab)。订阅,加深你对 Salesforce 身份的理解。

与架构师同行以及正走在架构师之路上的人分享集成知识,一起改变世界!

转录借助了 AI

STA 3.6