如何在aspnet.core Web API中验证JWT令牌?

时间:2018-08-21 07:33:00

标签: c# .net-core asp.net-web-api2 asp.net-core-2.0 asp.net-core-webapi

我创建了自定义中间件类,用于验证JWT令牌。我在configure方法中的app.AddMvc()之前调用此方法。 ***

我想知道我应该添加到配置服务中以使用JWT验证Web API的哪些内容?我已经在控制器类中添加了[授权]

我是否需要调用我的中间件类,该中间件类首先在Configure方法中验证JWT令牌?否则我应该打电话给App.UseAuthentication() 我正在使用以下命令:

 app.UseAuthentication();
 app.MessageHandlerMiddleware();
 app.UseMvc();

.net Web API实现是我的新手。你能帮我吗?

1 个答案:

答案 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()
        };
    });

(使用上面的链接查看GetSymmetricSecurityKeyGetValidAudienceGetValidIssuer扩展方法的实现)

也是非常重要的部分:

services.AddAuthorization(auth =>
{
    auth
    .AddPolicy(
        _configuration.GetDefaultPolicy(),
        new AuthorizationPolicyBuilder()
            .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
            .RequireAuthenticatedUser().Build()
    );
});