如何在aspnet.core web api中验证JWT令牌?

7
我创建了自定义中间件类来验证JWT令牌。在configure方法中,在app.AddMvc()之前调用此方法。***
我想知道在Configuration services中需要添加哪些内容以使用JWT对我的Web API进行身份验证?我已经在我的控制器类中添加了[Authorize]。
我需要首先调用验证JWT令牌的自定义中间件类,还是应该调用App.UseAuthentication()? 我按照以下顺序使用:
 app.UseAuthentication();
 app.MessageHandlerMiddleware();
 app.UseMvc();

我是新手,不了解如何实现 .net web API. 你能帮我吗?


2
创建“自定义中间件类”进行JWT验证的原因是什么?您不能使用内置的验证过程吗? - Kirk Larkin
坦白说,我不确定如何使用内置的验证过程进行验证!因此,我已经创建了自己的身份验证内容。 - Girish
1
阅读使用JWT保护ASP.NET Core 2.0应用程序,看看它是否有所帮助。 - Kirk Larkin
谢谢 Kirik Larkin。让我来检查一下。 - Girish
1个回答

4

我的一个回答中,您可以看到我们如何传递JWT令牌以及经典的.NET(非Core)ASP.NET WebAPI 2的代码是什么样子的。

这里没有太多的区别,ASP.NET Core的代码看起来相似。

关键的方面是- 当您在Startup中添加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()
    );
});

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