我需要的是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保持联系?
JwtSecurityTokenHandler
。您可以在您提到的MyGet存储库中的System.IdentityModel.Tokens
软件包中找到它(但版本现在有点旧),或者直接在Azure AD存储库中的System.IdentityModel.Tokens.Jwt
软件包中找到它:https://www.myget.org/gallery/azureadwebstacknightly
当然,使用标准协议来发行和检索JWT令牌是非常推荐的,OAuth2和OpenID Connect可能是最佳选择。app.UseOAuthBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Audience = "http://localhost:54540/",
Authority = "http://localhost:54540/"
});
app.UseOpenIdConnectServer(options =>
{
options.Provider = new AuthorizationProvider();
});
JwtSecurityTokenHandler
的最后一个参数是 SigningCredentials
。但是我该如何创建它的实例呢? - Sean我已经开始使用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/