使用Azure ACS时无法从Active Directory注销

时间:2013-03-13 11:29:19

标签: azure asp.net-mvc-4 single-sign-on acs adfs2.0

我在我的MVC 4应用程序中使用ACS 2.0。

它已配置为登录,适用于各种提供商,包括ADFS。 我需要实现注销功能。

由于this question已经过时,我使用了these samples中的代码:

以下是它的样子:

    // Load Identity Configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration;

    // Get wtrealm from WsFederationConfiguation Section 
    string wtrealm = config.WsFederationConfiguration.Realm;
    string wreply = wtrealm; //return url

    // Read the ACS Ws-Federation endpoint from web.Config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));

    signoutRequestMessage.Parameters.Add("wreply", wreply);
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);

    FederatedAuthentication.SessionAuthenticationModule.SignOut();

    var signoutUrl = signoutRequestMessage.WriteQueryString();

结果,我得到了我应该重定向的注销URL,它将处理令牌并将我发送回去。 URL如下所示:

https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f

因此,它可以按预期用于Google,Yahoo和Microsoft帐户。 当我退出并尝试访问受保护区域时,我会获得一个身份提供商列表,即使我选择了相同的提供商,我也必须再次登录。

但是当我使用ADFS提供程序时,它的工作原理如下:

  • 我点击退出并转到可用提供商页面

  • 我再次选择ADFS提供程序

  • 我使用旧的AD凭据进入受保护区域

  • 如果我将ADFS作为唯一的提供者,则跳过上面的步骤2,并且 我不断登录而无法更改用户。

当我看到会发生什么时,ACS不会处理从ADFS获得的安全令牌,并重新使用它。

关于如何强制ACS处理此令牌,您是否有任何线索?

提前致谢!

1 个答案:

答案 0 :(得分:0)

@ oren-melzer的回答是<+1>:浏览器缓存http基本凭据并自动重新发送它们。移动到表单auth(使用cookie)或注销,特别是拒绝浏览器的auth标头,不断返回401.有时这个“返回401有效凭据”用于清除浏览器,有时您只需要用户关闭浏览器