0

我试图搜索这个,但没有找到任何好的答案,所以我会在这里提出一个问题!

我有一个网站,几个不同的客户希望使用他们自己的 ADFS 服务访问该网站。然后我的计划是连接到集中存储(不是配置文件)中的不同 ADFS 服务,并根据客户提供给网站的一些参数检索正确的服务,并将其与代码一起使用。

但是,我找不到任何方法让一个网站使用多个联合服务。这种方法完全可以使用 WIF 和 ADFS 吗?如果是这样,您是否有任何链接或示例说明如何操作?

4

1 回答 1

2

这是可能的,您需要根据不同的用户选择创建不同的请求。

我的做法是在应用程序的某处(可能在登录页面)有一堆按钮/链接。每个按钮专用于一个外部 STS(在您的情况下为 ADFS)。单击按钮创建对wsignin1.0服务器的请求,当 ADFS 返回登录页面时,应该有一段代码尝试使用响应(SAML 令牌)并为当前会话创建身份。

这在过去更容易,因为 WIF 支持wif:FederatedPassiveSignInWeb 控制。您所需要的只是页面上的这些,每个控件都指向其 ADFS:

 <wif:FederatedPassiveSignIn id="adfs1" runat="server" Issuer="https://adfs1.adfs/adfs/ls" Realm="https://yourapp/loginpage.aspx" ImageUrl="adfs1.png/>
 <wif:FederatedPassiveSignIn id="adfs2" runat="server" Issuer="https://adfs2.adfs/adfs/ls" Realm="https://yourapp/loginpage.aspx" ImageUrl="adfs2.png" />

但是,由于某种未知原因,该控件已从 .NET 4.5 版本的 WIF 中删除,因此变得更加困难。几个月前,我为 .NET 4.5 重新创建了这个,代码是免费提供的:

http://code.google.com/p/net45federatedpassivesignin/

如果您不想使用它(例如,因为您在 MVC 上和/或您不喜欢 Web 控件),您仍然可以深入研究代码以查看特定控件的 ID 如何传递给选定的 ADFS这样当响应来自 ADFS 时,只有源控制(发送请求的那个)会使用它(这涉及使用请求的wctx可选参数wsignin1.0)。

编辑:您可能会考虑的另一个选择是让单个 ADFS 扮演依赖 STS 的角色。在这样的环境中,您的应用程序与单个 adfs 对话,并且此 adfs 与一堆其他 adfs 联合。这甚至更容易设置,因为它只需要正确的配置。尝试进行身份验证的用户被重定向到依赖的 adfs,并且 adfs 显示 HomeRealmDiscovery 页面,用户在该页面中从列表中选择目标 adfs 并继续在那里进行身份验证。

于 2013-10-17T12:10:58.563 回答