WS-Trust、WS-Fed 和 SAML 1.1/2.0 协议之间的区别

Difference between WS-Trust, WS-Fed and SAML 1.1/ 2.0 protocols

WS-Trust、WS-Fed 和 SAML 1.1/2.0 协议之间有什么区别?

当 SAML 在 WS-Trust 和 WS-Fed 协议中用作安全令牌时,我对这些协议的理解变得混乱。

有兴趣了解这些协议在何种情况下使用以及它们的不同之处。如果不使用商业产品/技术参考,您的答案将很容易理解。

在较高级别上,Microsoft 传统上使用 WS-* 协议。

开源运动使用了 SAML-P(P 代表协议),因此 Java。

WS-Fed 有两个配置文件 - 主动和被动。主动用于 WCF (WS-Trust),被动基于浏览器(WS-Fed 通过登录页面)。

这两个都使用 SAML 令牌。

在功能上,WS-Fed 和 SAML 做同样的事情。联邦

如果将两个 ADFS (Microsoft IDP) 联合在一起,则使用 WS-Fed。如果您添加 Sharepoint,它也会使用 WS-Fed。传递的令牌采用 SAML 令牌格式。

如果您有一个使用 Spring 的 Java 应用程序,那么它将通过 SAML-P 连接到 ADFS。传递的令牌采用 SAML 令牌格式。

这个问题很老,但我很难在网上找到正确的答案。

很多在线帖子说,'passive / browser' 客户端使用 WS-Fed,'active / smart' 使用 WS-Trust。这可能是因为活动用例默认使用 url,例如“/ws-trust/2005”或“/ws-trust/v1.x/”。这似乎不是 100% 准确的。伟大的免费书籍:Claims-based Identity,第二版帮助我解决了这个问题,我终于找到了一个令人满意的答案:

其中许多体系结构的目标是启用与浏览器或智能客户端的联合。与智能客户端的联合基于 WS-Trust 和 WS-Federation Active Requestor Profile。

这些协议描述了智能客户端(例如基于 Windows 的应用程序)和服务(例如 WCF 服务)之间的通信流程,用于从颁发者请求令牌,然后将该令牌传递给服务申请授权。

与浏览器的联盟基于 WS-Federation Passive Requestor Profile,它描述了浏览器和 Web 应用程序之间的相同通信流。它依靠浏览器重定向、HTTP GET 和 POST 来请求和传递令牌。

SAMLP 只是一种不同的协议,当涉及到重定向 URL 等事物的通信方式时,但差异并不相关(在大多数情况下)并且仅取决于客户端支持的内容(例如 Java 将使用 SAML)。在我看来,最大的区别在于 SAMLP 允许身份提供者启动的用例(我认为这是最安全的用例),其中用户从身份提供者开始(例如,您的 ADFS 服务器的 Web 代理,=Claims Provider in MS 术语),而不是从 Web 服务开始,然后重定向到服务提供商(=MS 术语中的中继方)。此外,当我们谈论 SAML 时,我们通常指的是 SAML 2.0,而 WS-Fed 使用 SAML 1.x 令牌(MS 称它们为令牌,SAML 称它们为断言...它只是一个签名且可能加密的 XML ,我认为理论上你可以在 WS-Fed 中使用其他令牌,然后在 SAML 中使用,但我从未听说过有人真正这样做过)。