我是不是应该要求 IdP 签署 SAML2 SSO 响应?
Posted
技术标签:
【中文标题】我是不是应该要求 IdP 签署 SAML2 SSO 响应?【英文标题】:Should I require IdP's to sign SAML2 SSO responses?我是否应该要求 IdP 签署 SAML2 SSO 响应? 【发布时间】:2012-10-25 10:29:20 【问题描述】:我们的应用具有与 3 个不同 (Shibboleth) IdP 的 SAML2 SSO 集成。我们正在尝试添加第 4 个(也是 Shibboleth),但遇到了一些问题,因为我们的应用程序希望所有 SSO 响应都经过可验证签名。其他 3 个正在签署他们的响应,但第 4 个没有,并且犹豫是否添加自定义配置以强制为我们的应用签名。
从技术上讲,我可以修改我们的应用程序以接受未签名的 SSO 响应,但我想知道我是否应该这样做。允许未签名的 SSO 响应有哪些陷阱?是否存在安全漏洞?
是否有任何 Shibboleth(或其他 SAML2 SSO)文档建议将响应签名作为最佳实践?
【问题讨论】:
【参考方案1】:对 IdP 遵循 SAML 2.0 规范的唯一要求是对断言进行数字签名(请参阅 http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf - 第 4.1.3.5 节)。这足以判断来自 IdP 的 SSO 操作是否应该受到与其联合的 SP 的信任。
签署外部响应是可选的。它有一些安全优势,例如防止消息插入或修改(请参阅 http://docs.oasis-open.org/security/saml/v2.0/saml-sec-consider-2.0-os.pdf 中的第 6.1.3/6.1.5 节) - 但实际上它通常被省略以代替依赖 SSL/TLS。
【讨论】:
那么,根据文档,如果我们的应用程序要求签名 authn 响应,我们在技术上不符合 SAML2 吗?我们所有的响应确实都是通过 HTTPS 强制执行的。 SAML 响应或断言的签名取决于您使用的绑定。由于我假设您通过 POST 绑定接收消息,因此响应和/或断言必须由 IDP 签名以确保消息完整性。我认为混乱源于正在签署响应的哪一部分。如果 Shibb 允许通过 POST 发送未签名的消息,我会感到惊讶。【参考方案2】:签署响应的全部目的是证明它们确实来自发行人。否则,“中间人”可能会改变属性,例如让他们自己访问应用程序。
ADFS v2.0 默认使用 SAML 对所有响应令牌进行签名。无法关闭此功能。
【讨论】:
以上是关于我是不是应该要求 IdP 签署 SAML2 SSO 响应?的主要内容,如果未能解决你的问题,请参考以下文章
SAML 2 和 ADFS 3.0 IDP - SSO 无效状态代码首次登录 - 但之后每次都成功