2015-05-25 22 views
15

Ho una app ASP.NET tradizionale che voglio spostare su ASP.NET 5 (vNext). Lo sto facendo come esercizio di apprendimento.Autenticazione in ASP.NET 5 (vNext)

La mia app corrente utilizza l'autenticazione basata su form. Tuttavia, mi piacerebbe usare OAuth. Stavo guardando il Security module ed ero curioso su cosa dovrebbe essere usato per OAuth. Vedo un'opzione per Microsoft.AspNet.Authentication.OAuth e Microsoft.AspNet.Authentication.OAuthBearer.

Quale di questi è utilizzato per consentire ad un utente di accedere?

Qualcuno sa di un esempio/esempio che mostra questi in azione?

risposta

12

Microsoft.AspNet.Authentication.OAuth

  • Consente 3rd Identifiers parti (ad esempio Google, Facebook) per autenticare gli utenti per voi, risparmiando agli utenti il ​​fastidio di registrazione.
  • Consente altre applicazioni di utilizzare l'applicazione per l'autenticazione

Una volta che gli utenti sono autenticate da un terzo partito, il OWIN middle-ware legge i loro OAuth biscotto e crea un cookie specifico dominio basata sulle attestazioni . Finché il cookie è disponibile (presente, non scaduto e non corrotto) i tuoi utenti rimangono Autenticati.

An introduction to the ASP.NET 5 Generic OAuth Provider

Microsoft.AspNet.Authentication.OAuthBearer

Crea gettoni al portatore. Quando un utente accede a un punto finale (Web-API) o è autenticato da una terza parte, la middleware OWIN OWIN restituisce un token al portatore. Il token al portatore viene inviato con tutte le richieste di servizio per identificare i tuoi utenti al posto dei cookie.

In avvio

app.UseOAuthBearerAuthentication(options => 
{ 
    options.Authority = "http://localhost:5000/oauth/"; 
    options.Audience = "http://localhost:5000/oauth/resources"; 

    options.TokenValidationParameters = new TokenValidationParameters 
    { 
     IssuerSigningKeys = new[] { new X509SecurityKey(cert) }, 
     ValidateLifetime = false, 
    }; 
    options.AutomaticAuthentication = true; 

    options.SecurityTokenValidators = new[] 
    { 
     new JwtSecurityTokenHandler() 
    }; 
}); 

portatore Gettoni vengono utilizzati nella creazione SPA (pagina singola applicazione) o per il fissaggio AJAX richieste.

L'autenticazione dei cookie è considerata adeguata per le richieste del server. Ma i punti finali di servizio (anche se non permettono C ross O RIGIN R eSource S Haring) sono più vulnerabili alle CSRF e XSS attacchi.


Molte applicazioni utilizzano entrambi:

Una pratica comune è quella di utilizzare cookie di autenticazione per le richieste di pagina e gettoni al portatore per AJAX richieste.

È necessario distinguere tra le risorse che utilizzano i cookie e le risorse che utilizzano i token.

In questo Stackoverflow answer, Matt DeKrey ha fatto un bel lavoro di delineare la sua realizzazione utilizzando

[Authorize("Bearer")]

Per controller o metodi che dovrebbero utilizzare portatore Gettoni piuttosto che la base [Authorize] attributo cookie di standard.


Molte applicazioni si basano su cookie da soli:

Come vulnerabile è l'applicazione per CSRF attacchi quando basandosi su cookie? Questo è discutibile. Molti siti si basano solo sui cookie e non affrontano mai problemi. La risposta potrebbe dipendere più dal tuo livello di traffico e dalle esigenze di sicurezza.

Se stai sviluppando un sito per decine di migliaia di utenti, probabilmente sei sicuro di fare affidamento sui cookie.

Se stai servendo milioni di utenti o proteggi importanti dati finanziari, le tue chiamate asincrone dovrebbero fare affidamento su token al portatore.


Nota: Lei parla con autenticazione basata su form, vi consiglio vivamente di utilizzare Identità. Il framework si integra con OWIN per offrire entrambi i tipi di funzionalità.

+0

Qual è l'utilizzo dell'identità del meccanismo predefinito? In ASP.NET 5 se dico solo app.UseIdentity() e uso l'attributo [Autorizza], tutto funziona correttamente, ma come faccio a sapere se utilizza l'autenticazione basata su cookie o token? –

+0

@VladimirDjurdjevic, il valore predefinito è auth cookie. Ecco un buon post sull'implementazione dell'autorizzazione token http://stackoverflow.com/questions/29048122/token-based-authentication-in-asp-net-5-vnext –