在 asp.net mvc 中验证 body 中的 SAML2 (P?) 令牌

Authenticate a SAML2 (P?) token in body in asp.net mvc

我有一个 ASP.NET MVC 应用程序,目前允许用户通过两个 ThinkTecture IDP 服务器进行连接。 MVC 应用程序信任这两个 IDP 服务器,并且它可以完美地验证用户。

当前设置使用 web.config 中 < modules > 部分中的 < System.IdentityModel.Services.WSFederationAuthenticationModule > < System.IdentityModel.Services.SessionAuthenticationModule > 来处理这些。

我们现在有一个新团体想通过向我们发送 SAML v2 令牌来验证他们的用户,但 MVC 应用程序似乎无法识别它。

我比较了来自 IDP 服务器 (SAML1) 和新登录服务器 (SAML2) 的 POST 响应,发现存在一些细微差异,这可能会导致问题。

IDP 服务器似乎使用 < trust:RequestedSecurityToken > 属性包装到 < saml:Assertion >。而新客户端发送 POST 请求 body 包含 < saml >< samlp:Response >

我的问题是:

1)这个新的 < samlp:Response > 是 Microsoft WIF 不支持的 SAML2P 版本吗?或者它只是对 < saml:Assertion > 元素感兴趣?

2) WIF 将在哪里查找 SAML 令牌? POSTBody?身份验证 header(承载)?

3) 目前,当用户未通过身份验证时,它将他们重定向到他们的本地 IDP 服务器,他们登录并 returns SAML 响应,然后获取。但是新客户端将简单地传递一个请求以查看带有 SAML 令牌的页面 (true single-sign-on)。我想知道这种差异是否会导致问题。我目前手动处理到用户本地 IDP 的重定向,因此已尝试为新客户端关闭此功能。

编辑 经过大量挖掘...

  1. Microsoft WIF 不支持 SAML2 协议,而且很可能会支持。

  2. SAML2 协议消息通常作为表单参数(saml= < saml:Response><等等...在 HTTP POST 的 body 中。在我的例子中,它没有使用 (saml=) 的标准参数格式,XML 只是直接内联在 HTTP POST body.

AFAIK,samlp 是 WIF 不支持(还?)的协议。它替代了 WS-Federation 中使用的查询字符串参数。您应该寻找第三方扩展 (How should I implement SAMLP 2.0 in an ASP.NET MVC 4 service provider?)。由于我自己没有使用过任何东西,因此无法提供进一步的建议。

确实它没有得到官方支持,但你可以做这样的事情来让它工作。

http://blogs.msdn.com/b/bradleycotier/archive/2012/10/28/saml-2-0-tokens-and-wif-bridging-the-divide.aspx

我找到的最佳解决方案是 Kentor IT - AuthServices

它处理数字签名的 SAML 令牌。

尽管它对我来说不是开箱即用的,因为我的第三方似乎使用的是非标准绑定技术(而不是标准的 HTTP Post 或 HTTP 重定向),所以我会必须构建我自己的自定义绑定。