我创建了自定义中间件类,用于验证JWT令牌。我在configure方法中的app.AddMvc()
之前调用此方法。 ***
我想知道我应该添加到配置服务中以使用JWT验证Web API的哪些内容?我已经在控制器类中添加了[授权]
我是否需要调用我的中间件类,该中间件类首先在Configure方法中验证JWT令牌?否则我应该打电话给App.UseAuthentication()
我正在使用以下命令:
app.UseAuthentication();
app.MessageHandlerMiddleware();
app.UseMvc();
.net Web API实现是我的新手。你能帮我吗?
答案 0 :(得分:1)
在one of my answers中,您可以看到我们如何传递JWT令牌以及代码如何查找经典的.NET(非核心)ASP.NET WebAPI 2。
差别不大,ASP.NET Core的代码看起来很相似。
关键方面是-在“启动”中添加JWT配置时,应用会自动处理验证。
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
IssuerSigningKey = _configuration.GetSymmetricSecurityKey(),
ValidAudience = _configuration.GetValidAudience(),
ValidIssuer = _configuration.GetValidIssuer()
};
});
(使用上面的链接查看GetSymmetricSecurityKey
,GetValidAudience
,GetValidIssuer
扩展方法的实现)
也是非常重要的部分:
services.AddAuthorization(auth =>
{
auth
.AddPolicy(
_configuration.GetDefaultPolicy(),
new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser().Build()
);
});