Azure AD B2C无法在Edge中正确注销

时间:2018-11-21 17:16:09

标签: microsoft-edge logout azure-ad-b2c

通过Microsoft的AD B2C sample,我能够在所有浏览器中成功登录并注销自己的租户,除了Edge以外,所有浏览器的行为都异常

问题:在Edge中注销并随后尝试进行新登录后,浏览器会迅速重定向到Azure,然后以前的用户似乎已自动登录在没有提示输入凭据的情况下由Azure输入。这显然不是我们想要的。

实际上,注销似乎在Edge中根本没有成功,并且我们必须等待Azure会话超时才能尝试再次正确登录。这仅在已部署的dev实例中发生,而不是在Edge中本地运行时发生。

问题:是否有一些变通办法可以使完整的注销功能在Edge中正常工作?为什么我只能在Edge中遇到这种情况?

登录方法:

public void Login( )
        {
            //Use the default policy (specified in Startup.Auth) to process the sign up / sign in flow
            if (!Request.IsAuthenticated)
            {
                HttpContext.GetOwinContext().Authentication.Challenge();
                return;
            }
            Response.Redirect("/");
        }

注销方法:

/*
    *  Called when requesting to sign out
    */
    public void SignOut( )
    {
        // To sign out the user, you should issue an OpenIDConnect sign out request.
        if (Request.IsAuthenticated)
        {
            IEnumerable<AuthenticationDescription> authTypes = HttpContext.GetOwinContext().Authentication.GetAuthenticationTypes();
            HttpContext.GetOwinContext().Authentication.SignOut( authTypes.Select(t => t.AuthenticationType).ToArray());
        }
    }

我尝试在注销中添加Session.RemoveAll(); Session.Abandon();,但这没用。

启动方法也如示例中所示。

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            app.UseOpenIdConnectAuthentication(
...);

...

1 个答案:

答案 0 :(得分:0)

请参考Azure文档上的描述

  

当您要使用户退出应用程序时,还不足以   清除应用程序的Cookie或以其他方式结束与用户的会话。   您还必须将用户重定向到Azure AD才能注销。如果失败   这样做,用户可能无需重新验证您的应用程序即可   再次输入其凭据。这是因为他们将有一个   Azure AD进行有效的单点登录会话。

因此,您可以简单地将用户重定向到end_session端点:

GET https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?
p=b2c_1_sign_in
&post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F

更多详细信息,请参阅Azure Active Directory B2C: Web sign-in with OpenID Connect