Je dois faire quelque chose d'assez simple: dans mon application ASP.NET MVC, je veux définir un IIdentity / IPrincipal personnalisé. Selon ce qui est plus facile / plus approprié. Je souhaite étendre la valeur par défaut afin de pouvoir appeler quelque chose comme User.Identity.Id
et User.Identity.Role
. Rien d'extraordinaire, juste quelques propriétés supplémentaires.
J'ai lu des tonnes d'articles et de questions, mais j'ai l'impression de rendre les choses plus difficiles qu'elles ne le sont en réalité. Je pensais que ce serait facile. Si un utilisateur se connecte, je souhaite définir une IIdentité personnalisée. J'ai donc pensé, je vais implémenter Application_PostAuthenticateRequest
dans mon global.asax. Cependant, cela est appelé à chaque demande, et je ne veux pas appeler la base de données à chaque demande qui demanderait toutes les données de la base de données et mettrait un objet IPrincipal personnalisé. Cela semble également très inutile, lent et au mauvais endroit (faire des appels de base de données là-bas) mais je peux me tromper. Ou d'où proviendraient ces données?
J'ai donc pensé que chaque fois qu'un utilisateur se connecte, je peux ajouter des variables nécessaires dans ma session, que j'ajoute à la IIdentity personnalisée dans le Application_PostAuthenticateRequest
gestionnaire d'événements. Cependant, mon Context.Session
est null
là, donc ce n'est pas non plus la voie à suivre.
Je travaille là-dessus depuis un jour maintenant et je sens que je manque quelque chose. Cela ne devrait pas être trop difficile à faire, non? Je suis également un peu dérouté par toutes les choses (semi) liées à cela. MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... Suis - je le seul qui trouve tout cela très confus?
Si quelqu'un pouvait me dire une solution simple, élégante et efficace pour stocker des données supplémentaires sur une IIdentity sans tout le fuzz supplémentaire .. ce serait génial! Je sais qu'il y a des questions similaires sur SO mais si la réponse dont j'ai besoin est là-dedans, j'ai dû l'oublier.
MemberShip...
, Principal
, Identity
. ASP.NET devrait rendre cela plus facile, plus simple et au plus deux approches pour gérer l'authentification.