我正在使用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();
});
}
答案 0 :(得分:1)
您的用户凭据可能已被缓存。这是Chrome和IE的默认行为,其中某些行为也是Microsoft故意设计的。您要实现的单一注销要求在每个应用程序上进行自定义编码。尝试以隐身模式从其他浏览器登录,看看是否仍然存在此问题。