在 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 的重定向,因此已尝试为新客户端关闭此功能。
编辑
经过大量挖掘...
Microsoft WIF 不支持 SAML2 协议,而且很可能会支持。
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?)。由于我自己没有使用过任何东西,因此无法提供进一步的建议。
确实它没有得到官方支持,但你可以做这样的事情来让它工作。
我找到的最佳解决方案是 Kentor IT - AuthServices。
它处理数字签名的 SAML 令牌。
尽管它对我来说不是开箱即用的,因为我的第三方似乎使用的是非标准绑定技术(而不是标准的 HTTP Post 或 HTTP 重定向),所以我会必须构建我自己的自定义绑定。
我有一个 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 的重定向,因此已尝试为新客户端关闭此功能。
编辑 经过大量挖掘...
Microsoft WIF 不支持 SAML2 协议,而且很可能会支持。
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?)。由于我自己没有使用过任何东西,因此无法提供进一步的建议。
确实它没有得到官方支持,但你可以做这样的事情来让它工作。
我找到的最佳解决方案是 Kentor IT - AuthServices。
它处理数字签名的 SAML 令牌。
尽管它对我来说不是开箱即用的,因为我的第三方似乎使用的是非标准绑定技术(而不是标准的 HTTP Post 或 HTTP 重定向),所以我会必须构建我自己的自定义绑定。