Domanda

Questa può essere una domanda un po 'ignorante, ma Im nuovo a MVC così mi dispiace!

I studiato il modello di autenticazione cena secchione, ma nella mia app ho un ruolo di autenticazione basata complicato. Così Quello che faccio è questa:

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

l'autenticazione sopra l'accesso ho il nome utente / passo con FormsAuth e poi creo il cookie.

Il problema qui è ogni volta che creo l'identità personalizzato, devo query al database per i ruoli degli utenti . C'è una corretta modo per aggirare questo o sto facendo la cosa giusta per interrogare il database per ogni richiesta in arrivo? Dovrei salvare l'elenco ruoli in un cookie o qualcosa del genere?

Anche io non capisco l'intero ciclo di vita come le forme di autenticazione si occupa dell'autenticazione? Io uso lo stesso modello di progettazione IFormsAuthentication che gli utenti cena secchione e durante un segno-in chiamo FormsAuth.SignIn() che a sua volta chiama FormsAuthentication.SetAuthCookie, quando ci si riesce a chiamare il metodo membershipservice.validateuser() ?? Anche se il set di auth cookie è stato per cui sarebbe nerd cena creare un biglietto, quindi aggiungerlo nella richiesta, e poi leggerlo durante PostAuthenticationRequest di controllare quale utente è stato. Fa l'operazione di biglietto come una sessione?

Grazie! Buon Natale!


Aggiorna : Questo link mi ha dato un po 'migliore comprensione su forma ticket di autenticazione.

È stato utile?

Soluzione

Un approccio alternativo è quello di memorizzare i ruoli del vostro utente nel ticket di autenticazione quando l'utente è autenticato. Poi per ogni richiesta (metodo Application_AuthenticateRequest del file Global.asax) è possibile estrarre i ruoli del ticket di autenticazione e creare un GenericPrincipal.

Vai a questa risposta per maggiori dettagli.

Altri suggerimenti

"Corretto?" La sua una questione di opinione.

direi, se non si verificano problemi con il prestazioni del database causato da questa query, quindi non ti preoccupare.

Se si, è possibile centralizzare il codice di autenticazione in una sorta di autenticazione provider o il tipo, e le informazioni di autenticazione cache in memoria fino a quando una scrittura aggiorna il database, che dovrebbe invalidare la cache allo stesso tempo.

(La tua seconda domanda farebbe bene da sola;. Non ho abbastanza informazioni per rispondere)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top