使用Azure AD的MVC 5无法注销

时间:2018-09-25 12:22:37

标签: asp.net-mvc azure authentication azure-active-directory

我正在使用MVC5,并使用OpenIdConnect对Azure AD进行了身份验证。

我的应用程序正在4个不同的Azure AD应用程序注册下运行;本地主机,DEV版本,UAT版本和生产版本。

UAT和生产在Azure的同一Web服务中的不同部署插槽下运行。

除了Azure的UAT部署插槽中的注销功能之外,所有其他功能都可以完美运行。当我单击“注销”时,它将带我到Microsoft注销“您已退出帐户”。导航回URL后,它使我重新登录(我也单击了“不要让我保持登录状态”)。

关于为什么可能在单个环境中发生的任何想法?除了URL和唯一标识符之外,Azure AD应用程序注册清单几乎相同。

我正在使用“ UseKentorOwinCookieSaver”包。

退出方法:

    public void SignOut()
    {
        HttpContext.GetOwinContext().Authentication.SignOut(
            OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType
            );
    }

Startup.cs:

    public void ConfigureAuth(IAppBuilder app)
    {            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseKentorOwinCookieSaver();

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context =>
                    {
                        context.HandleResponse();
                        context.Response.Redirect("/Error/message=" + context.Exception.Message);
                        return Task.FromResult(0);
                    },
                    SecurityTokenValidated = context =>
                    {
                        OnAuth();
                        return Task.FromResult(0);
                    }
                },                     
                AuthenticationMode = AuthenticationMode.Passive
            }
        );

        app.Use((context, next) =>
        {
            // The function to call...
            OnAuth();
            return next.Invoke();
        });

    }

1 个答案:

答案 0 :(得分:1)

您的用户凭据可能已被缓存。这是Chrome和IE的默认行为,其中某些行为也是Microsoft故意设计的。您要实现的单一注销要求在每个应用程序上进行自定义编码。尝试以隐身模式从其他浏览器登录,看看是否仍然存在此问题。

此线程为您提供了一些解决方法。 https://social.msdn.microsoft.com/Forums/azure/en-US/97199b97-a3f1-42ab-b5dc-103d3bc3cb53/azure-ad-single-sign-on-auto-sign-in-with-windows-credentials?forum=WindowsAzureAD