asp.net-mvc - crear - mvc authentication example
MVC 5 Autenticación externa con modo de autenticación=Formularios (2)
Por lo general, debe establecer el authentication mode="None"
, cuando los usuarios no están autenticados o si planea desarrollar un código de autenticación personalizado. MVC 5 se ha actualizado para usar ASP.NET Identity para la autenticación.
ASP.NET Identity admite la autenticación basada en notificaciones, donde la identidad del usuario se representa como un conjunto de notificaciones. Aquí, establece el authentication mode="Forms"
, las Reclamaciones no funcionarán, porque la ASP.NET Forms Authentication
no admite reclamaciones. Es por eso que obtienes un valor nulo.
Estoy siguiendo este tutorial para crear una aplicación MVC 5 simple con autenticación externa. Está funcionando bien, pero, si cambio el authentication mode="None"
al authentication mode="Forms"
, deja de funcionar.
Estoy obteniendo nulo en:
await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync()
Estoy leyendo mucho sobre algo para suprimir FormsAuthentication en la redirección. No sé si es la ruta correcta, pero traté de instalar este paquete nuget y el problema sigue ahí.
Entonces, ¿por qué me estoy volviendo nulo cada vez que cambio el modo de autenticación?
Pude hacer que esto funcionara (OWIN y FormsAuthentication) al agregar Response.SuppressFormsAuthenticationRedirect = true
a la clase ChallengeResult
.
Si sigues el tutorial, aquí está el código:
public class ChallengeResult : HttpUnauthorizedResult
{
public ChallengeResult(string provider, string redirectUri)
: this(provider, redirectUri, null)
{
}
public ChallengeResult(string provider, string redirectUri, string userId)
{
LoginProvider = provider;
RedirectUri = redirectUri;
UserId = userId;
}
public string LoginProvider { get; set; }
public string RedirectUri { get; set; }
public string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
// this line did the trick
context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
}