SAML Artifact的目的是什么?

42

我看到了很多流程图,它们展示了Identity Provider (IdP)、Service Provider (SP)和浏览器之间通过重定向传递SAML身份验证的方式。然而,现在对我来说似乎这些都是不必要的,所以我知道我错过了什么重要的东西。

请问有人能提供一个使用SAML Artifact(或非常有用)而不是不使用它的用例吗?

谢谢。

5个回答

76
通常,工件绑定的意图是减少 SAML 消息通过浏览器本身的流量。这可能是由于浏览器限制(具有查询字符串 / POST 负载大小限制的浏览器)或不支持 JavaScript(用于自动提交表单),甚至是为了改进如何传输 SAML 消息的安全模型。通过使用工件,通过 SAML 断言 / 属性声明携带的敏感数据不会通过浏览器传递,因此可以隐藏它们,使其对最终用户或站点和最终用户之间的攻击者不可见。这些机密数据只能通过后端渠道查找直接在站点之间解决。 SAML 2.0 Bindings specs 的第 3.6.2 节总结得最好。
HTTP Artifact绑定用于请求方和响应方需要使用HTTP用户代理作为中介进行通信的情况,但是中介的限制阻止或不鼓励通过它传输整个消息(或消息交换)。这可能是由于技术原因或出于不愿将消息内容暴露给中介(如果不使用加密则不可行)。请注意,由于需要随后使用另一个同步绑定(例如SOAP)解析工件,因此SAML消息发送方和接收方之间必须存在直接通信路径以相反方向传输工件(消息和工件的接收者必须能够向工件发行者发送请求)。工件发行者在挂起工件时还必须维护状态,这对负载平衡环境有影响。

1
SAML中是否存在任何允许无浏览器交互的内容?您可以捕获用户名和密码,然后在没有浏览器的情况下与IdP进行通信吗? - rock3t
SAML本身主要用于浏览器SSO。它可以包装在WS-Trust中(http://docs.oasis-open.org/ws-sx/ws-trust/v1.4/ws-trust.html),以提供您所需的功能,但这相当繁重。 - Scott T.
可以考虑的替代方案:OAuth 2.0 可用于简单的非浏览器情况,如基于密码的身份验证(https://tools.ietf.org/html/rfc6749)。许多身份安全产品和应用程序正在构建基于 OAuth 的 RESTful 身份验证 API。其中一个例子(免责声明:我是员工)来自 Ping Identity:https://apidocs.pingidentity.com/pingone/platform/v1/api/#authentication-apis - Scott T.
谢谢,Scott。OAuth 是我们主要采用的路径。对于 SAML 包装在 WS-Trust 中的方法感到非常好奇,从未听说过这种方法。有任何实现博客/如何操作的资料吗? - rock3t

34
扩展Scott T的答案,SAML Artifact Profile旨在提高安全性。为了防止用户在传输过程中修改其SAML Assertion(例如更改用户名、角色等),SAML 2.0建议开发人员通过XML签名对断言进行签名。由于现有的每种语言的XML解析器存在问题,XML签名极易受到XML包装攻击的影响。访问https://www.usenix.org/conference/usenixsecurity12/breaking-saml-be-whoever-you-want-be以查看针对SAML Assertions的XML包装攻击。
SAML Artifact Profile通过创建一次性使用的“artifact”,该artifact由用户(通过重定向或post)传递给服务提供商,而不是SAML Assertion来解决此问题。当服务提供商接收到一次性使用的artifact时,它会向身份提供商的Artifact Resolution Service(ARS)发送SAML Artifact Resolve请求(包含artifact)。然后,ARS用SAML Artifact Response(包含用户的SAML Assertion)作出响应,从而通过后端通道直接接收SAML Assertion,从而防止用户修改SAML Assertion。

谢谢您的解释。我能否将工件ID委派给其他应用程序(在同一组织下),并通过交换工件ID与IDP解决断言?当然,这个其他应用程序可以是任何应用程序,而不是已注册到IdP的SP。有什么想法吗? - Bhushan Karmarkar

15
一个 SAML 消息可以通过值或引用的方式从一个实体传输到另一个实体。指向 SAML 消息的引用称为“工件”。工件的接收者通过直接向工件发行者发送请求来解析引用,然后发行者会响应引用并返回实际的消息。
参考 SAML 2.0
如果没有工件,就无法获取实际消息。
请注意,仅在使用 HTTP 工件绑定时才需要这样做。(与更常见的 HTTP POST 绑定相反,它只是简单地发送 SAML 消息)。

3
使用HTTP Artifact绑定的另一个原因是您可以使用SSL来确保SAML消息的完整性和机密性。 SAML请求方和响应方无需对SAML消息进行签名、验证、加密和解密。

3

现在可能被认为是不再具有趣味性,但是如果您在用户代理和SP&IDP服务器之间拥有低带宽,并且在SP&IDP之间具有更好的带宽,则工件配置文件也很有用。 (重要的)声明不会从IDP到UA再到SP流通,并且在某些情况下可能表现出更好的性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接