asp.net 使用 WSFederationAuthenticationModule 针对多个身份提供者进行身份验证

Authentication against multiple identity providers using WSFederationAuthenticationModule for asp.net

我们有支持多个合作伙伴的多租户 asp.net MVC 网站。目前我们正在使用表单身份验证来验证用户。现在一些合作伙伴已经要求使用 SAML 支持单点登录。

我针对“Thinktecture”身份提供者进行了快速 POC 测试。我所做的只是为 VS 2012 安装“身份和访问”扩展并配置身份提供者。我注意到该扩展在 web.config 文件中添加了 IP 和领域的 URL 等配置设置。它还添加了“WSFederationAuthenticationModule”模块来处理身份验证。该模块在幕后处理所有重定向和响应验证。

在我的例子中,由于我们将有多个身份提供者,根据合作伙伴,我将选择身份提供者。不同IP 的URLs 将存储在数据库中。我无法列出 web.config 中的所有 IP。因此,我需要一种机制,我可以将用户重定向到适当的 IP URL,一旦 IP 回发结果,验证结果并通过声明检索用户信息。我不想对结果进行 XML 解析并验证响应,而只想调用“WSFederationAuthenticationModule”中的方法来完成繁重的工作。但我不确定哪些方法对我有用。有人可以帮我解决这个问题,或者列出我需要执行的一系列方法吗?

看看我的简单例子

http://www.wiktorzychla.com/2014/11/simplest-saml11-federated-authentication.html

诀窍是不要在管道中使用 WSFam 模块,而是使用它的 api 来触发重定向和使用响应。如果你遵循我的代码,你会看到有两个子句

 // wsfed response or not
 if ( !fam.IsSignInResponse(...) )
    // redirect to provider
 else
    // create local config and validate the incoming token

这个简单的例子非常适合多租户场景,实际上我们在多租户环境中每天都使用 ws-fed,大多数客户端都是基于这种核心方法。

也就是说,在使用响应的分支中以编程方式创建 SecurityTokenHandlerConfiguration 可以让您完全控制如何为不同租户验证令牌。