c# - asp - custom authentication in mvc 4
Almacenando más información usando FormsAuthentication.SetAuthCookie (4)
Estoy usando aspx y c # para configurar una cookie de autenticación para un inicio de sesión.
FormsAuthentication.SetAuthCookie(UserName, True)
Quiero almacenar más información en la misma cookie. ¿Puedo agregar valores a esta cookie de autenticación o tengo que usar una segunda cookie http?
Básicamente, estoy buscando un lugar donde guardar la Id
del usuario para poder acceder a la base de datos usando la tecla de fila de la tabla de usuarios
Gracias edén
Pase ese ID de usuario como el parámetro userName.
FormsAuthentication.SetAuthCookie(userId, True)
¿Cómo estás asegurando tus boletos de autenticación?
Puede agregar datos de usuario a FormsAuthenticationTicket y luego generar la cookie usted mismo.
Hay un ejemplo en la documentación de MSDN para FormsAuthenticationTicket .
EDITAR
Tenga en cuenta que al crear el ticket, debe establecer el tiempo de espera, que en general querrá ser el mismo que el valor configurado en web.config. Desafortunadamente, en el Framework 3.5 o anterior, la clase FormsAuthentication
no se expone públicamente. Para una solución, use una de las técnicas descritas en la respuesta a este elemento de conexión de comentarios .
ACTUALIZAR
Ese artículo de Connect Connect ya no está allí, por desgracia. Ojalá hubieras descrito brevemente cuáles eran las técnicas.
Sí, es una pena que Microsoft haya descartado los elementos históricos de Connect. En el IIRC, las dos técnicas que sugirieron fueron:
Utilice WebConfigurationManager para leer la sección de configuración relevante y obtener el valor de tiempo de espera.
Cree una cookie usando
FormsAuthentication.GetAuthCookie
, descifre usandoFormsAuthentication.Decrypt
e inspeccione elFormsAuthenticationTicket
generado.
O actualice a .NET 4.x donde hay una propiedad FormsAuthentication.Timeout
.
Vea esta pregunta para más información.
Puede poner lo que quiera en la cookie de autenticación siempre que le sea útil. Dicho esto, si está colocando información confidencial, al menos debe cifrarla, pero le recomiendo que no ponga información confidencial allí. Puedes hacer algo como:
Forms.SetAuthCookie (UserName + "|" + UserId, true);
Entonces, cuando necesite el nombre de usuario o la identificación del usuario, estará allí. Solo cargue la cookie y analice los valores que necesita.
Nuevamente, recomiendo no hacer esto, especialmente porque lo he presentado anteriormente . Dicho esto, es posible. Debe crear métodos de acceso para extraer los datos:
public int CurrentUserId
{
get
{
int userId = 0;
if (HttpContext.Current.Request.IsAuthenticated)
{
userId = Convert.ToInt32(HttpContext.Current.User.Identity.Name.Split(''|'')[1]);
}
return userId;
}
}
public string CurrentUserName
{
get
{
string userName = string.Empty;
if (HttpContext.Current.Request.IsAuthenticated)
{
userName = HttpContext.Current.User.Identity.Name.Split(''|'')[0];
}
return userName;
}
}
Sí, es inteligente usar "|" Para poner más información. Si Microsoft tiene otro método sobrecargado.
public static void SetAuthCookie(String userName, bool createPersistentCookie, string userData)`
Entonces nuestra vida será mucho más fácil, nuestro código será más seguro.