JWT 不记名令牌流程

JWT Bearer Token Flow

我想要的是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 保持相关性?

如果您正在寻找一种(简单的)方法来生成您自己的 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 联系我。

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

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

配置服务:

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>

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