Necesito hacer algo bastante simple: en mi aplicación ASP.NET MVC, quiero establecer un IIdentity / IPrincipal personalizado. Lo que sea más fácil / más adecuado. Quiero extender el valor predeterminado para poder llamar a algo como User.Identity.Id
y User.Identity.Role
. Nada especial, solo algunas propiedades adicionales.
He leído toneladas de artículos y preguntas, pero siento que lo estoy haciendo más difícil de lo que realmente es. Pensé que iba a ser fácil. Si un usuario inicia sesión, quiero establecer una identidad personalizada. Entonces pensé, lo implementaré Application_PostAuthenticateRequest
en mi global.asax. Sin embargo, eso se llama en cada solicitud, y no quiero hacer una llamada a la base de datos en cada solicitud que solicitaría todos los datos de la base de datos y colocaría un objeto IPrincipal personalizado. Eso también parece muy innecesario, lento y en el lugar equivocado (haciendo llamadas a la base de datos allí) pero podría estar equivocado. ¿O de dónde más vendrían esos datos?
Así que pensé, cada vez que un usuario inicia sesión, puedo agregar algunas variables necesarias en mi sesión, que agrego a la identidad personalizada en el Application_PostAuthenticateRequest
controlador de eventos. Sin embargo, mi Context.Session
está null
allí, por lo que tampoco es el camino a seguir.
Llevo un día trabajando en esto y siento que me falta algo. Esto no debería ser demasiado difícil de hacer, ¿verdad? También estoy un poco confundido por todas las cosas (semi) relacionadas que vienen con esto. MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... ¿Soy el único que encuentra todo esto muy confuso?
Si alguien pudiera decirme una solución simple, elegante y eficiente para almacenar algunos datos adicionales en una identidad sin toda la confusión adicional ... ¡eso sería genial! Sé que hay preguntas similares sobre SO, pero si la respuesta que necesito está ahí, debo haberla pasado por alto.
MemberShip...
, Principal
, Identity
. ASP.NET debería hacer esto más fácil, simple y como máximo dos enfoques para tratar con la autenticación.