JWT Bearer令牌流程

时间:2015-05-31 04:52:44

标签: asp.net-core jwt bearer-token

我想要的是ASP.NET Core中JWT生成和JWT消耗的方法。

没有OAuth2流程,我确实让IdentityServerv3与OAuth2一起使用,但是当我拥有双方时,对于访问API的单个应用程序来说,这样做太过分了。

我遇到的主要困难是在ASP.NET Core中找到相当于Microsoft.Owin.Security.Jwt的内容。此列表https://www.myget.org/gallery/aspnetvnext中的任何内容似乎都没有关系。或者该包实际上是否与ASP.NET Core保持相关?

2 个答案:

答案 0 :(得分:5)

如果您正在寻找(简单)方法来生成自己的JWT令牌,则应直接使用JwtSecurityTokenHandler。您可以在您提到的MyGet存储库的System.IdentityModel.Tokens包中找到它(但现在版本有点旧),或者直接在Azure AD存储库的System.IdentityModel.Tokens.Jwt包中找到它:https://www.myget.org/gallery/azureadwebstacknightly

当然,使用标准协议来发布和检索您的JWT令牌是超过推荐的,而OAuth2和OpenID Connect可能是最佳选择。

请注意, IdentityServer 并不是唯一适用于ASP.NET 5的服务器。我个人正在开发Katana 3附带的OAuth2授权服务器中间件的高级分支。提供了不同的方法: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();
});

要了解有关此项目的更多信息,我建议您阅读http://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-introduction/

如果您需要更多信息,请随时在https://jabbr.net/#/rooms/AspNetCore上ping我。

答案 1 :(得分:2)

我已经开始使用OpenIddict,我认为这正是您所需要的。

这基本上是我需要的所有配置:

<强> ConfigureServices:

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

<强>配置

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

还有一两件小事,例如您的DbContext需要从OpenIddictContext<ApplicationUser, Application, ApplicationRole, string>派生。

您可以在我的博客文章中看到完整的解释(包括指向github repo的链接): http://capesean.co.za/blog/asp-net-5-jwt-tokens/