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