2015-05-31 27 views
6

Potrzebuję metody generowania JWT i konsumpcji JWT w środowisku ASP.NET Core.Przepływ tokena na okaziciela JWT

Brak przepływu OAuth2, mam IdentityServerv3 współpracujący z OAuth2, ale jest to tylko przesada w przypadku pojedynczej aplikacji uzyskującej dostęp do interfejsu API, gdy jestem właścicielem obu stron.

Głównym źródłem trudności, jakie mam, jest znalezienie odpowiednika Microsoft.Owin.Security.Jwt w środowisku ASP.NET Core. Nic na tej liście https://www.myget.org/gallery/aspnetvnext wydaje się odnosić. Czy jest to pakiet rzeczywiście istotne w ASP.NET Core?

+0

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

+0

dzięki. Przekonałem się już o tym i korzystałem z niego w międzyczasie, ale tylko dla konsumpcji JWT, a nie generowania i używa pakietów Microsoft.Owin, które wydają się być przestarzałe w asp.net5. Są one użyteczne, ponieważ nie używają Microsoft.AspNet.Authentication, gdzie wszystko się porusza. –

Odpowiedz

5

Jeśli szukasz (prostej) metody generowania własnych tokenów JWT, powinieneś bezpośrednio użyć JwtSecurityTokenHandler. Można go znaleźć w pakiecie System.IdentityModel.Tokens na repozytorium MyGet pan wspomniał (ale wersja jest już trochę stary) lub bezpośrednio na Azure repozytorium AD, w opakowaniu System.IdentityModel.Tokens.Jwt: https://www.myget.org/gallery/azureadwebstacknightly

Oczywiście, za pomocą standardowego protokołu do wystawianie i pobieranie tokenów JWT jest więcej niż zalecane, a OAuth2 i OpenID Connect są prawdopodobnie najlepszymi kandydatami do tego.

Zauważ, że IdentityServer nie jest jedynym serwerem, który działa na ASP.NET 5. Ja osobiście pracuje na zaawansowanym rozwidleniu pośredniczącego serwera autoryzacji OAuth2 że pochodzi z Katana 3, który oferuje inne podejście: 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(); 
}); 

Aby uzyskać więcej informacji na temat tego projektu, polecam lekturę http://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-introduction/.

Jeśli chcesz uzyskać więcej informacji, możesz wysłać mi zapytanie na numer https://jabbr.net/#/rooms/AspNetCore.

+0

'Ostatni parametr JwtSecurityTokenHandler' to' SigningCredentials'. Ale jak utworzyć taką instancję? – Sean

+0

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

2

Zacząłem używać OpenIddict i uważam, że jest dokładnie to, czego potrzebujesz.

Jest to w zasadzie cała konfiguracja Potrzebowałem:

ConfigureServices:

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

Konfiguracja

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/"; 
}); 

Istnieje jeden lub dwa inne drobne rzeczy, takie jak DbContext musi pochodzić z OpenIddictContext<ApplicationUser, Application, ApplicationRole, string>.

Można zobaczyć pełną długość wyjaśnienie (w tym linki do repo github) na tym blogu z kopalni: http://capesean.co.za/blog/asp-net-5-jwt-tokens/

Powiązane problemy