【问题标题】:Why is Identity.IsAuthenticated() sometimes true sometimes false为什么 Identity.IsAuthenticated() 有时为真有时为假
【发布时间】:2011-04-26 11:23:59
【问题描述】:

我有一个使用身份验证服务的 MVC 应用程序,使用返回 true/false 的 IsAuthenticated() 方法。

它似乎没有连接到 FormsAuthentication.SignOut() 方法,或者当我在登录时添加新的授权 cookie 时。

登录:

HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket))); 

退出:

 FormsAuthentication.SignOut();

我的控制器上有一个自定义授权属性,它使用 IsAuthenticated() 调用身份验证服务,但它返回错误的值。

有谁知道为什么下面的代码有时会返回真或假?

userPrincipal.Identity.IsAuthenticated

【问题讨论】:

    标签: asp.net asp.net-mvc-3 forms-authentication


    【解决方案1】:

    如果您从非安全页面调用IsAuthenticated 并在网络配置中设置了 requireSSL="true",则该IsAuthenticated 始终返回 false,因为无法读取经过身份验证的 cookie。

    在其他情况下,如果用户通过身份验证,则返回 true,否则返回 false。设置一个像这样的断言来检查你是否从安全页面请求它。

    Debug.Assert(HttpContext.Current.Request.IsSecureConnection, "oops, the IsAuthenticated is not working here");
    
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
    
    }
    

    【讨论】:

    • 您好,我没有设置 SSL。 IsAuthenticated 在从 AuthorizeCore() 上的服务调用时返回 false,这是我的自定义 Authorize 属性。
    • @Jon 然后可能无法读取 cookie 和会话。您是否设置了读取写入 cookie 和会话数据的服务?
    • 我想我可能已经意识到了这个问题。我的身份验证服务依赖于在启动期间由 StructureMap 注入的 IPrincipal。但是,此时它将未经身份验证。我需要在当前线程之外使用 IPrincipal 。这被传递给我的 CustomAuthorise 类(继承自 AuthorizeAttribute)上调用的 AuthorizeCore()。
    【解决方案2】:

    (从上面的评论复制)

    我的身份验证服务依赖于在启动期间由 StructureMap 注入的 IPrincipal。但是,此时它将未经身份验证。我需要在当前线程之外使用 IPrincipal 。这被传递到在我的 CustomAuthorise 类上调用的 AuthorizeCore()(从 AuthorizeAttribute 继承)

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2020-03-09
      • 2019-01-30
      • 2018-07-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      相关资源
      最近更新 更多