为什么Identity.IsAuthenticated()有时候有时是假的

时间:2011-04-26 11:24:00

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

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

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

登录:

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

退出:

 FormsAuthentication.SignOut();

我的控制器上有一个自定义授权属性,它使用IsAuthenticated()调用auth服务但它返回的值不正确。

有谁知道为什么以下代码有时会返回true或false?

userPrincipal.Identity.IsAuthenticated

2 个答案:

答案 0 :(得分:2)

IsAuthenticated如果从非安全页面调用它并且在web配置上设置requireSSL =“true”,则总是返回false,因为无法读取经过身份验证的cookie。

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

Debug.Assert(HttpContext.Current.Request.IsSecureConnection, "oops, the IsAuthenticated is not working here");

if (HttpContext.Current.User.Identity.IsAuthenticated)
{

}

答案 1 :(得分:0)

(复制自上述评论)

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