SAML 工件的用途是啥?
Posted
技术标签:
【中文标题】SAML 工件的用途是啥?【英文标题】:What is the purpose of a SAML Artifact?SAML 工件的用途是什么? 【发布时间】:2012-11-16 23:01:10 【问题描述】:我看过一堆关于如何通过重定向在身份提供者 (IdP)、服务提供者 (SP) 和浏览器之间传递的流程图。但是现在对我来说似乎没有必要,所以我知道我错过了一些东西。 与不使用 SAML Artifact 相比,有人可以为我提供一个 SAML Artifact 需要(或非常有用)的用例吗?
谢谢。
【问题讨论】:
【参考方案1】:通常,工件绑定的目的是减少通过浏览器本身的 SAML 消息流。这可能是由于浏览器限制(对查询字符串/POST 有效负载大小有限制的浏览器)或不支持 javascript(对于自动提交的表单),甚至是为了改进 SAML 消息传输方式的安全模型。通过使用工件,通过 SAML 断言/属性语句携带的敏感数据不会通过浏览器传递,因此可以在您的站点和最终用户之间隐藏最终用户或攻击者。这些机密数据只能通过反向通道查找在站点之间直接解析。
SAML 2.0 Bindings specs 的第 3.6.2 节总结得最好:
HTTP Artifact 绑定适用于 SAML 请求者和响应者需要使用 HTTP 用户代理进行通信 作为中间人,但中间人的限制排除或 不鼓励传输整个消息(或消息交换) 通过这。这可能是出于技术原因或由于 不愿将消息内容暴露给中介(如果 使用加密是不切实际的)。注意因为需要 随后使用另一个同步解决工件 绑定,如 SOAP,之间必须存在直接通信路径 SAML 消息的发送者和接收者在相反的方向 工件的传输(消息的接收者和工件必须 能够将请求发送回工件 发行人)。工件发行者还必须保持状态,而 工件待处理,这对负载平衡有影响 环境。
【讨论】:
SAML 中是否存在允许无浏览器交互的内容?您捕获用户名:密码,然后在没有浏览器的情况下与 IdP 交谈? SAML 本身主要用于浏览器 SSO。它可以包装在 WS-Trust (docs.oasis-open.org/ws-sx/ws-trust/v1.4/ws-trust.html) 中以提供您所要求的内容 - 但这是相当重量级的。 要考虑的替代方案:OAuth 2.0 可用于简单的非浏览器情况,例如基于密码的身份验证 (tools.ietf.org/html/rfc6749)。许多身份安全产品和应用程序正在构建基于 OAuth 的 RESTful 身份验证 API。一个这样的例子(免责声明我是一名员工)来自 Ping Identity:apidocs.pingidentity.com/pingone/platform/v1/api/… 谢谢,斯科特。 OAuth 是我们主要采用的路径。对封装在 WS-Trust 中的 SAML 非常感兴趣,但从未听说过这种方法。任何实现博客/操作方法?【参考方案2】:扩展 Scott T 的回答,SAML Artifact Profile 旨在提高安全性。为了防止用户在流量中修改其 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 Artifact Response(包含用户的 SAML 断言)进行响应,从而防止用户修改 SAML 断言,因为它是由服务提供商通过反向通道直接接收的。
【讨论】:
嗨 - 感谢您的解释。我可以将工件 ID 委托给其他应用程序(在同一个保护伞下),并且该应用程序通过交换工件 ID 来解决与 IDP 的断言吗?当然,这个其他应用程序可以是任何应用程序,而不是注册到 IdP 的 SP。有什么想法吗?【参考方案3】:SAML 消息通过值或引用从一个实体传输到另一个实体。对 SAML 消息的引用称为工件。工件的接收者通过直接向工件的发布者发送请求来解析引用,然后发出者以工件引用的实际消息进行响应。
参考SAML 2.0,
没有工件,就无法获取实际消息。
请注意,这仅在使用 HTTP 工件绑定时才需要。 (与简单发送 SAML 消息的更常见的 HTTP POST 绑定相反)。
【讨论】:
【参考方案4】:使用 HTTP Artifact 绑定的另一个原因是您可以使用 SSL 来确保 SAML 消息的完整性和机密性。 SAML 请求者和响应者不需要对 SAML 消息进行签名、验证、加密和解密。
【讨论】:
【参考方案5】:现在它可能被认为是出于兴趣,但如果您在用户代理和 sp & idp 服务器之间的带宽较低且 sp & idp 之间的带宽较好,则工件配置文件也很有用。 (重)断言不会从 idp 到 ua 和从 ua 到 sp 循环,在某些情况下它可能会表现出更好的性能。
【讨论】:
以上是关于SAML 工件的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章