2015-09-03 36 views
0

我想在JWT令牌过期时注销我的用户。但出于某种原因,在我退出后,ClaimsPrincipal仍然存在。ASP.NET身份 - AuthenticationManager.SignOut不工作

例如:Request.IsAuthenticated即使在我退出后也总是如此。

我退出所有可用的身份验证类型。 (ApplicationCookie,ExternalCookie,Auth0)。

我不知道我可能会错过这里。

internal static void SignOut() 
    { 
     var authenticationManager = HttpContext.Current.Request.GetOwinContext().Authentication; 
     if (authenticationManager == null) return; 
     var appTypes = authenticationManager.GetAuthenticationTypes().Select(at => at.AuthenticationType).ToArray(); 
     authenticationManager.SignOut(appTypes); 

     var httpResponse = HttpContext.Current.Response; 
     var httpRequest = HttpContext.Current.Request; 
     httpResponse.Redirect(
      string.Format("https://{0}/logout?returnTo={1}", 
       ConfigurationManager.AppSettings["auth0Domain"], 
       httpRequest.Url)); 
    } 

我很感激任何可能会指导我解决此问题的建议/想法。

+0

不确定你正在使用哪个身份服务器,但这里是来自Identityserver的指南https://identityserver.github.io/Documentation/docs/overview /mvcGettingStarted.html。见'添加注销' –

+0

在'Startup.Auth.cs'中显示代码? – trailmax

+0

@trailmax感谢您的时间。我从'ActionFilter'中调用Signout(),并且即使在调用Signout之后,action方法也会继续执行。我通过签出会话解决了问题,然后在过滤器中设置'filterContext.Result = new RedirectResult('logouturl)'。这样它就停止了Action方法的执行并正确地注销了用户。 – udayr

回答

0

感谢您的时间。我从'ActionFilter'中调用Signout(),并且即使在调用Signout之后,action方法也会继续执行。我通过退出会话解决了问题,然后在过滤器中设置

filterContext.Result = new RedirectResult('logouturl) 

。这样它就停止了Action方法的执行并正确注销了用户