通过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(
...);
...
答案 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