2015-05-31 22 views
6

Quello che voglio è un metodo di generazione JWT e consumo JWT in ASP.NET Core.Flusso Token del portatore JWT

No flusso OAuth2, ho l'IdentityServerv3 che funziona con OAuth2 ma è semplicemente eccessivo per una singola app che accede a un'API quando possiedo entrambi i lati.

La principale fonte di difficoltà che sto riscontrando è trovare l'equivalente di Microsoft.Owin.Security.Jwt in ASP.NET Core. Niente in questo elenco https://www.myget.org/gallery/aspnetvnext sembra correlato. O quel pacchetto in realtà rimane pertinente con ASP.NET Core?

+0

https://gist.github.com/siacomuzzi/1832edeb905a9582a7dd? – adaam

+0

grazie. Ho già trovato questo e lo stavo usando nel frattempo, ma è solo per il consumo JWT, non per la generazione e utilizza i pacchetti Microsoft.Owin che sembrano essere stati deprecati in asp.net5. Sono utilizzabili solo perché non usano Microsoft.AspNet.Authentication, che è dove tutto sembra muoversi. –

risposta

5

Se si sta cercando un modo (semplice) per generare i propri token JWT, è necessario utilizzare direttamente lo JwtSecurityTokenHandler. Si può trovare nel pacchetto System.IdentityModel.Tokens sul repository MyGet lei ha citato (ma la versione è un po 'vecchio ormai) o direttamente sul repository AD Azure, nel pacchetto System.IdentityModel.Tokens.Jwt: https://www.myget.org/gallery/azureadwebstacknightly

Naturalmente, utilizzando un protocollo standard per emettere e recuperare i token JWT è più che raccomandato e OAuth2 e OpenID Connect sono probabilmente i migliori candidati per questo.

Nota che IdentityServer non è l'unico server che funziona su ASP.NET 5. Sto personalmente lavorando su una forcella avanzata del middleware server di autorizzazione OAuth2 che viene fornito con Katana 3 e che offre un approccio diverso: https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server

app.UseOAuthBearerAuthentication(new JwtBearerOptions 
{ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    Audience = "http://localhost:54540/", 
    Authority = "http://localhost:54540/" 
}); 

app.UseOpenIdConnectServer(options => 
{ 
    options.Provider = new AuthorizationProvider(); 
}); 

Per saperne di più su questo progetto, io consiglierei di leggere http://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-introduction/.

Sentitevi liberi di mandarmi un ping su https://jabbr.net/#/rooms/AspNetCore se avete bisogno di maggiori informazioni.

+0

L'ultimo parametro 'JwtSecurityTokenHandler' è' SigningCredentials'. Ma come posso creare un'istanza di questo? – Sean

+0

@Sean http://stackoverflow.com/a/33531139/542757 – Pinpoint

2

Ho iniziato a utilizzare OpenIddict e penso che sia esattamente quello che ti serve.

Questo è essenzialmente tutta la configurazione che mi serviva:

ConfigureServices:

services.AddIdentity<ApplicationUser, ApplicationRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders() 
      .AddOpenIddictCore<Application>(config => config.UseEntityFramework()); 

Configura

app.UseOpenIddictCore(builder => 
{ 
    // tell openiddict you're wanting to use jwt tokens 
    builder.Options.UseJwtTokens(); 
    // NOTE: for dev consumption only! for live, this is not encouraged! 
    builder.Options.AllowInsecureHttp = true; 
    builder.Options.ApplicationCanDisplayErrors = true; 
}); 

// use jwt bearer authentication 
app.UseJwtBearerAuthentication(options => 
{ 
    options.AutomaticAuthenticate = true; 
    options.AutomaticChallenge = true; 
    options.RequireHttpsMetadata = false; 
    options.Audience = "http://localhost:58292/"; 
    options.Authority = "http://localhost:58292/"; 
}); 

Ci sono uno o due altre cose minori, come il tuo DbContext deve derivare da OpenIddictContext<ApplicationUser, Application, ApplicationRole, string>.

è possibile vedere una lunghezza spiegazione completa (compresi i collegamenti per il repo github) in questo post del blog di mine: http://capesean.co.za/blog/asp-net-5-jwt-tokens/