2011-12-28 9 views
21

Questo codice è dalla MVC codice sorgente RTM asp.netChi stabilisce la proprietà IsAuthenticated del HttpContext.User.Identity

chi imposta la proprietà IsAuthenticated del HttpContext.User.Identity?

protected virtual bool AuthorizeCore(HttpContextBase httpContext) { 
     if (httpContext == null) { 
      throw new ArgumentNullException("httpContext"); 
     } 

     IPrincipal user = httpContext.User; 
     if (!user.Identity.IsAuthenticated) { 
      return false; 
     } 
    } 

è la proprietà IsAuthenticated impostata chiamando il metodo (MVC progetto di esempio 4,0 asp.net):

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

Quando il debug del codice della LogOn metodo mvc asp.net 4.0 progetto di esempio dopo la chiamata al metodo FormsAuth ... sopra. L'esecuzione di

User.Identity.IsAuthenticated 

restituisce ancora FALSE. Solo quando il debug del metodo LogOff il

User.Identity.IsAuthenticated 

dice TRUE. Quindi, chi sta impostando questa proprietà su TRUE e WHEN?

UPDATE:

Si tratta di circa FORME autenticazione!

Ho eseguito il debug del metodo LogOn del progetto di esempio mvc asp.net e dopo che l'azione LogOn è stata restituita, il metodo AuthorizeCore che ho sostituito viene chiamato e quindi la proprietà IsAuthenticated è TRUE!

L'impostazione di TRUE dipende forse dalle raccolte ModelState.Value.Error?

Se count == 0 nelle collezioni di errore del IsAuthenticated è TRUE altrimenti l'IsAuthenticated è FALSE

Può confermare che?

risposta

22

Questa proprietà viene impostata dal modulo di autenticazione moduli leggendo e analizzando il cookie di autenticazione moduli dalla richiesta . Ho messo la richiesta in grassetto perché sospetto che sia la ragione per cui stai osservando questo comportamento. Lasciatemi spiegare. Quando si chiama FormsAuthentication.SetAuthCookie in caso di autenticazione riuscita, si aggiunge il cookie di autenticazione alla risposta . Questo cookie verrà memorizzato sul browser del client e verrà inviato su successive richieste. Quindi è solo sulle richieste successive che l'utente sarà considerato come autenticato. Quindi devi sempre reindirizzare dopo aver chiamato il metodo SetAuthCookie. All'interno della richiesta che ha chiamato questo metodo, è già noto se l'utente ha fornito credenziali corrette, quindi non è necessario controllare la proprietà IsAuthenticated.

+0

Nessun link sorgente ma a giudicare le altre soluzioni asp.net mvc Ho scoperto che sei l'esperto ;-) Mi piace la spiegazione con le richieste successive che molte persone non hanno capito/trovato cercando su Google in questo stesso argomento. – Elisabeth

+0

@DarinDimitrov Se la risposta è scritta il cookie corretto che include il ticket FormAuthentication dopo essere stato autenticato correttamente. L'asp.net leggerà e risolverà la richiesta. determinerà se 'IsAuthenticated' è vero di false. Qualsiasi problema per favore correggimi Grazie. –

1

L'origine della proprietà dipende dal tipo di Identity. Per un FormsIdentity, la proprietà restituisce semplicemente true:

/// <devdoc> 
/// Indicates whether or not authentication took 
/// place. 
/// </devdoc> 
public bool       IsAuthenticated { get { return true;}} 

Questo ha un senso perché il codice in FormsAuthenticationModule.cs assignes solo FormsIdentity dopo l'autenticazione. Il codice sembra abbastanza complesso, vedo che estrae un ticket da un cookie, ma non riesco a trovare dove convalida il ticket.

+0

mi dispiace Andomar Non ho scritto tutto su Forms auth. Ho modificato la mia domanda. – Elisabeth

+0

Quello che ho letto finora su google e dopo alcuni test è necessario impostare FormsAuthentication.SetAuthCookie che IsAuthenticated restituisce true. con var isAuthenticated = base.AuthorizeCore (httpContext); nel mio metodo Overizeid AuthorizeCore. In realtà dovrebbe essere chiamato AuthenticateCore ma questa è un'altra storia. Sarei lieto e contrassegnarlo come soluzione se qualcuno ha un collegamento/prova di Microsoft qualunque cosa faccia diventare il true jump di IsAuthenticated! – Elisabeth

Problemi correlati