ADFS、WIF、WS 联合、SAML 和 STS 之间有啥区别?

Posted

技术标签:

【中文标题】ADFS、WIF、WS 联合、SAML 和 STS 之间有啥区别?【英文标题】:What's the difference between ADFS, WIF, WS Federation, SAML, and STS?ADFS、WIF、WS 联合、SAML 和 STS 之间有什么区别? 【发布时间】:2011-12-20 05:23:23 【问题描述】:

这些是用于 Microsoft 服务单点登录的众多技术和流行语。

谁能解释一下 ADFS、WIF、WS 联合、SAML 和 STS(安全令牌服务),包括它们的使用地点和时间。

【问题讨论】:

【参考方案1】:

ADFS(Active Directory 联合服务)- 由 Microsoft 生产并基于 Windows Identity Foundation (WIF) 构建的现成安全令牌服务 (STS)。依靠 AD 进行身份验证。可用于主动(SOAP Web 服务)或被动(网站)场景,并支持 SAML 令牌、WS-Federation、WS-Trust 和 SAML-Protocol。它可以用作身份提供者(针对 AD)或联合提供者。

http://technet.microsoft.com/en-us/library/adfs2(v=ws.10).aspx

WIF (Windows Identity Foundation) - 用于在 .NET 应用程序和依赖方中驱动基于声明的身份验证的 .NET 库。它也可以用作 WS-Trust 客户端和构建自定义 STS。

http://msdn.microsoft.com/en-us/security/aa570351

WS-Federation - 依赖方和 STS 用来协商安全令牌的协议。应用程序使用 WS Federation 从 STS 请求安全令牌,而 STS(大多数情况下)使用 WS Federation 协议将 SAML 安全令牌返回给应用程序。这通常是通过 HTTP(GET 和 POST 和重定向)。将此与完全基于 Web 服务的 WS-Trust 进行对比。

http://msdn.microsoft.com/en-us/library/bb498017.aspx

SAML 令牌(安全断言标记语言)- 这只是用于安全令牌的 XML 格式,通常捕获用户信息(声明)和其他相关的安全相关数据(签名、令牌颁发者等)。应用程序使用令牌来验证用户和驱动应用程序行为(例如授权)。 SAML 安全令牌经过签名以确保完整性并可选择加密,因此只有 RP 和 STS 才能看到其内容。在使用 WIF 的 ASP.NET 网站中,令牌默认加密并分块为 cookie,但这可以更改。

http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language

STS(安全令牌服务)- 如上所述,STS 是位于依赖方应用程序和用户之间的代理。 STS 是安全令牌的发行者。 “发行人”通常是 STS 的同义词。 STS 被配置为两个角色:在对用户进行身份验证时作为 身份提供者 (IdP) 或作为联合提供者 ( FP)当他们位于信任链的中间并充当其他 IdP 的“依赖方”时。 IdP 需要一种对用户进行身份验证的方法。有些(如 ADFS)使用 Active Directory,有些则使用自定义数据库,如 SQL Server Membership(不是 ADFS)。如果用户正确认证,STS 将颁发一个安全令牌。

http://msdn.microsoft.com/en-us/library/ff650503.aspx

http://docs.oasis-open.org/ws-sx/ws-trust/v1.4/os/ws-trust-1.4-spec-os.html#_Toc212615442

希望这会有所帮助。在基于声明的身份验证中有很多概念和部分需要理解。要全面了解,您应该查看A Guide to Claims-Based Identity and Access Control。

【讨论】:

总体不错的答案 - 请注意,尽管 SAML 不是“通常在浏览器 cookie 中加密”。 SAML 消息通常通过 TLS/SSL 上的请求(POST 或重定向)参数或 SOAP 传输,并通过数字签名保护其消息完整性(通常是关注而不是机密性)。 你是对的。我的意思是,在 WIF/ADFS/WS-Federation 模型中,SAML 令牌最终作为加密 cookie 保存在用户的浏览器中。 @Garrett Vlieger:感谢您的解释【参考方案2】:

从大局来看:

假设一个基于 ASP.NET 浏览器的应用程序需要身份验证和授权。

应用程序可以自行推出,也可以外包。

WIF 是一个 .NET 库,它允许 ASP.NET 实现这种外包。

它与 STSADFS 是 STS 的一个实例)对话,后者针对身份存储库进行身份验证并以声明的形式提供授权信息。 STS 提供一组签名的可信声明。

WIF 和 ADFS 之间使用的协议是 WS-Federation

如果 STS 是基于 Java 的(例如 Ping Identity 或 OpenAM),那么 WIF 将使用 SAML 协议进行通信。 ADFS 还支持 SAML 以启用联合。

(例如,联盟允许面向 Java 的公司 A 中的用户通过针对 A 的身份存储库进行身份验证来访问面向 .NET 的公司 B 中的 ASP.NET 应用程序。公司 A 和公司 B 在联盟意义上相互信任。)

【讨论】:

SAML 与 Java 无关。我们在很多 .NET Windows 服务中使用 SAML。【参考方案3】:

这篇文章旨在阐明在 ADFS 2.0 中支持的 SAML 令牌和在 Windows Server 2012 R2 中的 ADFS 版本 ADFS 3.0 之前不支持的 SAML 协议

1) ADFS 3.0 之前不支持 SAML 协议

2) 基于 .net 4.5 的 WIF 应用程序需要使用 WS-Fed 协议,目前不支持 SAML-Protocol

3) SAML 令牌是基于 XML 的。 ADFS 2.0 和以前的版本支持 SAML 令牌。 ADFS 1.0。 1.1。和 2.0 只支持 SAML 令牌,不支持协议

4) 如果您使用 WIF,则需要 WS-Fed(协议) - 因此您可以执行以下操作:

SAML 协议 ADFS WS-FED WIF (.net 4.5)

来自维基:

• ADFS 1.0 - Windows Server 2003 R2(额外下载)

• ADFS 1.1 - Windows Server 2008 和 Windows Server 2008 R2。

• ADFS 2.0 - Windows Server 2008 和 Windows Server 2008 R2(下载 来自 Microsoft.com)

• ADFS 2.1 - Windows Server 2012。

• ADFS 3.0 - Windows Server 2012 R2。

【讨论】:

以上是关于ADFS、WIF、WS 联合、SAML 和 STS 之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

.NET (ADFS / WIF) 和 Java (Federation) 之间的属性如何映射

ADFS RelayState

如何设置 Web 应用程序以在 JAVA 中使用 ADFS /SAML/WS-*?

使用 ADFS2 作为 IP 使用 WIF 保护后端 WCF 服务

ADFS 服务器上的 SAML LogOutRequest 处理失败

ADFS 2.0 Web 应用注销