JWT令牌流程

6
我需要的是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保持联系?

请点击下方链接查看与编程相关的内容:https://gist.github.com/siacomuzzi/1832edeb905a9582a7dd - adaam
谢谢。我已经遇到过这个问题并在此期间使用它,但它仅用于JWT消费,而不是生成,并且使用了似乎已被弃用的Microsoft.Owin包在asp.net5中。它们可用,只是它们不使用Microsoft.AspNet.Authentication,这就是一切似乎要移动到的地方。 - Adam
2个回答

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的服务器。我个人正在开发一个高级的OAuth2授权服务器中间件分支,它附带Katana 3,并提供了不同的方法: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 上联系我。

JwtSecurityTokenHandler 的最后一个参数是 SigningCredentials。但是我该如何创建它的实例呢? - Sean

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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接