Question

Cela peut être une question un peu ignorant, mais Im nouveau à Mvc si je suis désolé!

J'ai étudié le modèle auth nerd dîner, mais dans mon application j'ai une authentification basée sur le rôle compliqué. Donc ce que je fais est la suivante:

 void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authCookie = HttpContext.Current.Request
               .Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    FormsAuthenticationTicket ticket = 
                            FormsAuthentication.Decrypt(encTicket);
                    CustomIdentity id = new CustomIdentity(ticket.Name);
                    GenericPrincipal prin = new GenericPrincipal(id, id.Roles);
                    HttpContext.Current.User = prin;
                }
            }
        }

LogOn je authentification le nom d'utilisateur / passe avec FormsAuth puis je crée le cookie.

Le problème ici est chaque fois que je crée l'identité personnalisée, je dois query la base de données pour les rôles des utilisateurs . Y at-il un correct autour ou ce que je fais la bonne chose à interroger la base de données sur chaque requête entrante? Dois-je enregistrer la liste des rôles dans un cookie ou quelque chose?

Je ne comprends pas vraiment le cycle de vie de la façon dont les formes auth prend en charge l'authentification? J'utilise le même modèle de conception de IFormsAuthentication que les utilisateurs de dîner et intello au cours d'une ouverture de session que j'appelle FormsAuth.SignIn() qui appelle à son tour FormsAuthentication.SetAuthCookie, Quand il réussit à appeler la méthode membershipservice.validateuser() ?? De plus, si le auth cookie ait été pourquoi aurait NERD dîner créer un billet, puis l'ajouter dans la requête, puis le lire pendant PostAuthenticationRequest pour vérifier que l'utilisateur était. Est-ce que l'opération de billets comme une session?

Merci! Joyeux Noël!


Mise à jour : Ce lien m'a donné une meilleure compréhension au sujet légèrement ticket d'authentification.

Était-ce utile?

La solution

Une autre approche consiste à stocker les rôles de votre utilisateur dans le ticket d'authentification lorsque votre utilisateur est authentifié. Ensuite, pour chaque demande (méthode Application_AuthenticateRequest du fichier global.asax) vous pouvez extraire les rôles du ticket d'authentification et de créer un GenericPrincipal.

Voir cette réponse pour plus de détails.

Autres conseils

"Correct?" C'est une question d'opinion.

Je dirais que, si vous ne rencontrez des problèmes avec la performance de base de données causée par cette requête, alors ne vous inquiétez pas à ce sujet.

Si vous êtes, vous pouvez centraliser votre code d'authentification dans une sorte de auth fournisseur ou le type, et des informations d'authentification du cache en mémoire jusqu'à ce qu'une écriture met à jour la base de données, ce qui devrait invalider le cache en même temps.

(Votre deuxième question ferait bien lui-même,. Je n'ai pas assez d'informations pour y répondre)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top