asp.net mvc - mvc - Quién establece la propiedad IsAuthenticated de HttpContext.User.Identity
custom authentication in mvc 4 (2)
Este código es del código fuente asp.net mvc RTM
¿Quién establece la propiedad IsAuthenticated de HttpContext.User.Identity?
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
}
¿Se establece la propiedad IsAuthenticated llamando al método (asp.net mvc proyecto de ejemplo 4.0):
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
Cuando depuro el código del método LogOn del proyecto de ejemplo asp.net mvc 4.0 después de la llamada al método FormsAuth ... anterior. La ejecución de
User.Identity.IsAuthenticated
todavía está volviendo FALSO. Solo cuando depuro el método LogOff el
User.Identity.IsAuthenticated
dice VERDADERO Entonces, ¿quién establece esta propiedad en VERDADERO y CUANDO?
ACTUALIZAR :
¡Esto se trata de la autenticación FORMS !
Ahora depuré el método LogOn del proyecto de ejemplo asp.net mvc y después de devolver la acción LogOn, se llama a mi método AuthorizeCore y la propiedad IsAuthenticated es TRUE.
¿La configuración de TRUE depende de las colecciones ModelState.Value.Error?
Si count == 0 en las colecciones de errores, IsAuthenticated es TRUE, de lo contrario, IsAuthenticated es FALSE
¿Puedes confirmar eso?
El módulo de autenticación de formularios establece esta propiedad leyendo y analizando la cookie de autenticación de formularios de la solicitud . Puse la solicitud en negrita porque sospecho que esa es la razón por la que estás observando este comportamiento. Dejame explicar. Cuando llama a FormsAuthentication.SetAuthCookie
con la autenticación exitosa, está agregando la cookie de autenticación a la respuesta . Esta cookie se almacenará en el navegador del cliente y se enviará en solicitudes posteriores . Por lo tanto, solo en solicitudes posteriores se considerará que el usuario está autenticado. Por lo tanto, siempre debe redireccionar después de llamar al método SetAuthCookie. Dentro de la solicitud que llamó a este método, usted ya sabe si el usuario proporcionó las credenciales correctas, por lo que no necesita verificar la propiedad IsAuthenticated.
El origen de la propiedad depende del tipo de Identity
. Para un FormsIdentity
, la propiedad simplemente devuelve verdadero:
/// <devdoc>
/// Indicates whether or not authentication took
/// place.
/// </devdoc>
public bool IsAuthenticated { get { return true;}}
Eso tiene sentido porque el código en FormsAuthenticationModule.cs
solo asigna un FormsIdentity
después de la autenticación. El código parece bastante complejo, veo que extrae un ticket de una cookie, pero no puedo encontrar dónde valida el ticket.