【问题标题】:Unable to sign out from Active Directory when using Azure ACS使用 Azure ACS 时无法从 Active Directory 注销
【发布时间】:2013-03-13 11:29:18
【问题描述】:

我在我的 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 处置此令牌有任何线索吗?

提前致谢!

【问题讨论】:

  • ACS 在这种情况下从不将令牌保存在 cookie 中。唯一的 cookie 位于 ADFS 和您的 RP。如果您在加入域的计算机上,我怀疑 ADFS 可能配置为自动登录。您能否确认您最初是否必须使用用户名/密码才能登录,以及您是否在使用私人浏览器窗口时自动登录?
  • Oren,我确认我必须第一次登录 - 我的机器不在那个域中。私人浏览器窗口上的行为相同。而且我确实怀疑 ADFS 和 RP 之间的令牌没有被处理。如果您愿意提供帮助,请告诉我您的 twitter/fb/e-mail。我把网址和AD账号发给你看看,我也可以分享资源。
  • 更新:在 Facebook 上找到您并分享了凭据和 URL。如果您需要资源,请告诉我。
  • 这个问题与cookie无关。您的问题是您的 ADFS 实例使用 HTTP 基本身份验证。大多数浏览器会在浏览器窗口的整个生命周期内记住 HTTP Basic 凭据。您应该将 ADFS 配置为使用表单身份验证(登录网站而不是弹出窗口)。

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


【解决方案1】:

@oren-melzer 的回答 +1:浏览器缓存 http 基本凭据并自动重新发送它们。移动到表单身份验证(使用 cookie)或注销时,特别拒绝浏览器的身份验证标头,不断返回 401。有时这种“返回 401 以获取有效凭据”可以清除浏览器,有时您必须简单地要求用户关闭浏览器.

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 2015-04-03
    • 2015-11-17
    • 2021-06-26
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多