net mvc custom asp c# asp.net asp.net-mvc forms-authentication

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:

  1. Utilice WebConfigurationManager para leer la sección de configuración relevante y obtener el valor de tiempo de espera.

  2. Cree una cookie usando FormsAuthentication.GetAuthCookie , descifre usando FormsAuthentication.Decrypt e inspeccione el FormsAuthenticationTicket 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.