C# 具有多个STS的WIF';s

C# 具有多个STS的WIF';s,c#,.net,asp.net,wif,C#,.net,Asp.net,Wif,很抱歉图像质量太差,但它显示了我正在努力实现的情景,并想知道最好的解决方案是什么 我有一个测试项目设置,使用RP对单个STS进行测试-在这种情况下工作正常,RP被定向到STS进行批准,然后发送一个令牌,很简单 但是,我希望,比如说,在我的RP上有一个下拉列表,您可以选择一个“模式”,并根据该模式,将授权重新定向给其中一个STS提供商。显然,我不能直接将其重新定向到STS,因此它必须是动态的,并且立即删除的web.config设置将重新定向到.NET项目自动放置的位置 有人能提供这方面的指导吗?

很抱歉图像质量太差,但它显示了我正在努力实现的情景,并想知道最好的解决方案是什么

我有一个测试项目设置,使用RP对单个STS进行测试-在这种情况下工作正常,RP被定向到STS进行批准,然后发送一个令牌,很简单

但是,我希望,比如说,在我的RP上有一个下拉列表,您可以选择一个“模式”,并根据该模式,将授权重新定向给其中一个STS提供商。显然,我不能直接将其重新定向到STS,因此它必须是动态的,并且立即删除的web.config设置将重新定向到.NET项目自动放置的位置


有人能提供这方面的指导吗?

听起来你会从使用Windows Azure的AppFrabric访问控制服务(ACS)中受益。您希望避免在应用程序中放入代码来与每个STS提供者通信,而ACS就是为了解决这个问题而设计的。其思想是,您可以使用任意多的STS提供程序配置ACS,然后您的应用程序(使用WIF)仅与ACS通信以执行授权


请在此处阅读更多信息(单击左侧的“访问控制”)

您也可以使用ADFS v2.0来完成此任务。与ADF联合的任何其他STS将出现在“主域发现”下拉列表中


AppFabric ACS是云中“本质上”的ADF,没有任何东西可以阻止您联合ADF和ACS。

以下是您要做的。在global.asax中,添加此代码

void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
    string whr = HttpContext.Current.Request.QueryString["whr"]; 
    if (!string.IsNullOrEmpty(whr))
    {
        //add your logic to determine the STS
        e.SignInRequestMessage.HomeRealm = @"http://path-to-STS";
    }
}
“RedirectingToIdentityProvider”覆盖也正是我要做的

只要在这里发布此链接,您就可以在这里找到IdentityFederationSamples的集合,如果这有助于获得完整的解决方案的话。有一个示例用于重定向到两个STS中的一个,另一个示例显示链接STS。

是否可以在Azure之外使用ACS?或者@thedixon:您是否计划在Azure上部署?如果两个答案都是“否”,那么我看不出这个答案如何回答这个问题。我缺少什么?虽然ACS托管在Azure中,但使用/消费ACS的应用程序可以托管在任何地方。