Frage

Dies mag eine etwas ignorante Frage sein, aber ich bin neu bei MVC, also tut es mir leid!

Ich habe das Nerd -Dinner -Auth -Modell studiert, aber in meiner App habe ich eine komplizierte rollenbasierte Authentifizierung. Also, was ich tue, ist Folgendes:

 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;
                }
            }
        }

Bei Anmeldung i Authentifizierung Der Benutzername/Pass mit FormsAuth und dann erstelle ich das Cookie.

Das Problem hier ist Jedes Mal, wenn ich die benutzerdefinierte Identität erstelle, muss ich Fragen Sie die Datenbank für die Benutzerrollen ab. Gibt es eine Korrekt Way um das herum oder mache ich das Richtige, um die DB auf jeder eingehenden Anfrage abzufragen? Sollte ich die Rollenliste in einem Cookie oder so speichern?

Ich verstehe auch nicht wirklich den gesamten Lebenszyklus, wie Formenautoren sich um die Authentifizierung kümmern? Ich benutze das gleiche IFormsAuthentication Designmuster, das Nerd-Dinner-Benutzer und während eines Anmeldes ich rufe, rufe ich an FormsAuth.SignIn() was wiederum anruft FormsAuthentication.SetAuthCookie, Wann schafft es das aufzurufen membershipservice.validateuser() Methode ?? Auch wenn der Auth Cookie wurde eingestellt Warum sollte das Nerd -Abendessen ein Ticket erstellen, es dann in die Anfrage hinzufügen und es dann lesen? PostAuthenticationRequest Um zu überprüfen, welcher Benutzer es war. Ist der Ticketbetrieb wie eine Sitzung?

Vielen Dank! Frohe Weihnachten!


Aktualisieren : Dieser Link gab mir ein etwas besseres Verständnis für Formulare Authentifizierungskarte.

War es hilfreich?

Lösung

Ein alternativer Ansatz besteht darin, die Rollen Ihres Benutzers im Authentifizierungs -Ticket zu speichern, wenn Ihr Benutzer authentifiziert ist. Dann für jede Anfrage (Application_AuthenticateRequest Methode der global.asax -Datei) Sie können die Rollen aus dem Authentifizierungs -Ticket extrahieren und a erstellen GenericPrincipal.

Siehe diese Antwort für mehr Details.

Andere Tipps

"Richtig?" Es ist eine Frage der Meinung.

Ich würde sagen, wenn Sie keine Probleme mit der durch diese Abfrage verursachten Datenbankleistung haben, machen Sie sich keine Sorgen.

Wenn dies der Fall ist, können Sie Ihren Authentifizierungscode in einen Auth -Anbieter oder -Typ zentralisieren und Authentifizierungsinformationen im Speicher zwischen sich bringen, bis ein Schreiben die Datenbank aktualisiert, die den Cache gleichzeitig ungültig machen sollte.

(Ihre zweite Frage würde von selbst gut abschneiden. Ich habe nicht genug Informationen, um sie zu beantworten.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top