打开多个选项卡时注销时的奇怪行为

问题描述 投票:0回答:1

我正在开发可以集成Owin身份验证的MVC Web应用程序(Microsoft Azure和Office 365)。如果用户打开多个选项卡,我注意到登录和注销时有奇怪的行为。这是步骤:

  1. 用户登录
  2. 用户在另一个选项卡中打开菜单链接
  3. 用户从选项卡之一注销
  4. 用户单击另一个选项卡上的任何菜单链接,并将其重定向到MS登录页面

这里是一些代码:

Startup.Auth.cs

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
    app.CreatePerOwinContext(ApplicationDbContext.Create);
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(30),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
    app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = ClientId,
            Authority = Authority,
            PostLogoutRedirectUri = PostLogoutRedirectUri,
            Notifications = new OpenIdConnectAuthenticationNotifications
            {
                AuthenticationFailed = (context) =>
                {
                    context.HandleResponse();
                    context.OwinContext.Response.Redirect("/Home/Index");
                    return Task.FromResult(0);
                }
            }
        }
    );
}

注销方法

public ActionResult LogOut()
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);

    .....
}

注销通过AJAX调用执行。

我该如何解决我的问题?

c# asp.net-mvc owin
1个回答
0
投票

这完全有道理。你到底在期待什么?如果您注销,则从会话中注销,而不是从选项卡中注销。

© www.soinside.com 2019 - 2024. All rights reserved.