是否有必要验证 SAML 断言
Is it necessary to validate a SAML Assertion
作为服务提供商,我正在尝试通过从身份提供商 (IdP) 获取 SAML 断言 (SAML 1.0) 来对我页面上的用户进行身份验证。执行以下步骤(非常抽象):
- 用户访问我的页面
- 我将用户重定向到用户进行身份验证的 IdP
- 我得到一个 SAML 工件,我用它从 IdP 请求 SAML 断言
- IdP 将 SAML 断言直接发送回我的页面
- ?
这个过程是否足以确保用户身份验证是合法的?
我是仅在第 5 步中授予用户访问我的服务的权限,还是必须通过验证断言中的签名来确保 SAML 断言有效?如果是这样,我该怎么做?我是否遗漏了任何其他步骤?
我的简短个人建议:如果 IDP 已经签署断言,验证它的密钥应该已经在元数据中,验证它应该是一个简单的操作并且具有很大的安全优势。就这样吧。
但是...(长答案)
总是很难说什么是安全的,什么不是。这一切都取决于您对站点的安全性要求。使用断言是一种使其更安全的方法。
这样用户自己不能编辑断言。签名是更安全的一步,它确保断言来自 IDP 并且没有被更改。
没有它,攻击者就有可能伪装成 IDP,将工件重定向到自己的服务器。攻击者然后可以用他想要的任何断言来响应。另一种情况是,如果断言不受签名保护,它可能会在互联网上传输时在某处更改。
对于任何安全控制,您都必须权衡用户身份验证对您的重要性以及绕过它的人的后果。
不,如果您使用的是工件解析协议,则不需要验证断言的签名如果您信任传输。如果传输是 https url 并且您的服务器具有一组正确的受信任根证书,则该传输通常是可信的。
详情
SAML2 标准(核心,第 5.3 节)指出,如果断言包含在另一个已签名的元素中,则应将其视为正确签名。在 artifact resulotion 情况下,这意味着覆盖整个 artifact 解析响应消息的签名足以将断言视为 signed.The 标准进一步表示,如果定义,通过经过身份验证的 SLL 连接接收的 SAML 消息可能被认为已正确签名根据个人资料。
查看 WebSSO 配置文件,它指出对于工件解析(配置文件,4.1.4.4)“使用工件解析配置文件的工件取消引用必须相互验证、完整性保护和保密。”。正确设置的 https 连接涵盖了哪个恕我直言。
但是如果您以完全管理方式执行 SAML2,您还应该有一个针对您的特定设置的部署配置文件,明确定义 https 连接是否可信。
作为服务提供商,我正在尝试通过从身份提供商 (IdP) 获取 SAML 断言 (SAML 1.0) 来对我页面上的用户进行身份验证。执行以下步骤(非常抽象):
- 用户访问我的页面
- 我将用户重定向到用户进行身份验证的 IdP
- 我得到一个 SAML 工件,我用它从 IdP 请求 SAML 断言
- IdP 将 SAML 断言直接发送回我的页面
- ?
这个过程是否足以确保用户身份验证是合法的? 我是仅在第 5 步中授予用户访问我的服务的权限,还是必须通过验证断言中的签名来确保 SAML 断言有效?如果是这样,我该怎么做?我是否遗漏了任何其他步骤?
我的简短个人建议:如果 IDP 已经签署断言,验证它的密钥应该已经在元数据中,验证它应该是一个简单的操作并且具有很大的安全优势。就这样吧。
但是...(长答案) 总是很难说什么是安全的,什么不是。这一切都取决于您对站点的安全性要求。使用断言是一种使其更安全的方法。
这样用户自己不能编辑断言。签名是更安全的一步,它确保断言来自 IDP 并且没有被更改。
没有它,攻击者就有可能伪装成 IDP,将工件重定向到自己的服务器。攻击者然后可以用他想要的任何断言来响应。另一种情况是,如果断言不受签名保护,它可能会在互联网上传输时在某处更改。
对于任何安全控制,您都必须权衡用户身份验证对您的重要性以及绕过它的人的后果。
不,如果您使用的是工件解析协议,则不需要验证断言的签名如果您信任传输。如果传输是 https url 并且您的服务器具有一组正确的受信任根证书,则该传输通常是可信的。
详情
SAML2 标准(核心,第 5.3 节)指出,如果断言包含在另一个已签名的元素中,则应将其视为正确签名。在 artifact resulotion 情况下,这意味着覆盖整个 artifact 解析响应消息的签名足以将断言视为 signed.The 标准进一步表示,如果定义,通过经过身份验证的 SLL 连接接收的 SAML 消息可能被认为已正确签名根据个人资料。
查看 WebSSO 配置文件,它指出对于工件解析(配置文件,4.1.4.4)“使用工件解析配置文件的工件取消引用必须相互验证、完整性保护和保密。”。正确设置的 https 连接涵盖了哪个恕我直言。
但是如果您以完全管理方式执行 SAML2,您还应该有一个针对您的特定设置的部署配置文件,明确定义 https 连接是否可信。