SAML工件的目的是什么?

时间:2012-11-28 23:19:26

标签: saml saml-2.0 opensaml

我已经看到了一系列关于如何通过重定向在身份提供商(IdP),服务提供商(SP)和浏览器之间传递的流程图。但是现在我似乎没必要,所以我知道我错过了一些东西。

有人可以为我提供一个用例,与不使用SAML工件相比,需要(或非常有用)SAML工件吗?

谢谢。

5 个答案:

答案 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,并且在某些情况下可能表现出更好的性能。