我已经看到了一系列关于如何通过重定向在身份提供商(IdP),服务提供商(SP)和浏览器之间传递的流程图。但是现在我似乎没必要,所以我知道我错过了一些东西。
有人可以为我提供一个用例,与不使用SAML工件相比,需要(或非常有用)SAML工件吗?
谢谢。
答案 0 :(得分:64)
通常,工件绑定的目的是通过浏览器本身减少SAML消息的流量。这可能是由于浏览器限制(对查询字符串/ POST有效负载大小有限制的浏览器)或不支持JavaScript(对于自动提交的表单),甚至是为了改进SAML消息传输的安全模型。通过使用工件,通过SAML断言/属性语句传送的敏感数据不会通过浏览器传递,因此可以隐藏最终用户或站点与最终用户之间的攻击者。这些机密数据只能通过反向信道查找在站点之间直接解决。
SAML 2.0 Bindings specs的第3.6.2节总结了最佳内容:
HTTP Artifact绑定适用于SAML的情况 请求者和响应者需要使用HTTP用户代理进行通信 作为中介,但中介的限制排除或 阻止传输整个消息(或消息交换) 通过它。这可能是出于技术原因或因为a 不愿意将消息内容暴露给中间人(如果 使用加密是不切实际的)。请注意,因为需要 随后使用另一个同步来解决工件 绑定,如SOAP,必须存在直接的通信路径 SAML邮件发件人和收件人的反方向 工件的传输(消息和工件的接收器必须 能够将请求发送回工件 发行人)。工件发行者也必须维持状态 工件正在等待,这对负载均衡有影响 的环境中。
答案 1 :(得分:27)
扩展Scott T的答案,SAML工件配置文件旨在提高安全性。为防止用户修改SAML断言中流量(例如更改用户名,角色等),SAML 2.0建议开发人员通过XML签名签署断言。由于每种语言现有XML解析器中存在问题,因此XML签名极易受到XML包装攻击。访问https://www.usenix.org/conference/usenixsecurity12/breaking-saml-be-whoever-you-want-be,查看针对SAML断言的XML包装攻击。
SAML工件配置文件通过创建一次性使用“工件”来解决此问题,该工件由用户(通过重定向或发布)传递给服务提供者,而不是SAML断言。当服务提供者收到一次性使用工件时,它会向身份提供者的工件解析服务(ARS)发送SAML工件解析请求(包含工件)。然后,ARS使用SAML工件响应(包含用户的SAML断言)进行响应,从而防止用户修改SAML断言,因为服务提供商通过反向信道直接接收SAML断言。
答案 2 :(得分:11)
SAML消息通过值或引用从一个实体传输到另一个实体。 SAML邮件的引用称为工件。工件的接收者通过直接向工件的发行者发送请求来解析引用,工件的发行者然后使用工件引用的实际消息进行响应。
参考SAML 2.0,
没有神器,就无法获得实际的消息。
请注意,仅在使用HTTP工件绑定时才需要这样做。 (与更简单的发送SAML消息的HTTP POST绑定相反)。
答案 3 :(得分:1)
使用HTTP Artifact绑定的另一个原因是您可以使用SSL来确保SAML消息的完整性和机密性。 SAML请求者和响应者不需要对SAML消息进行签名,验证,加密和解密。
答案 4 :(得分:1)
现在可能认为它不感兴趣,但如果用户代理和sp& amp;之间的带宽较低,则工件配置文件也很有用。 idp服务器和sp& s之间更好的带宽IDP。 (重)断言不会从idp循环到ua,也不会从ua循环到sp,并且在某些情况下可能表现出更好的性能。