c# - 如何在 aspnet.core web api 中验证 JWT token ?

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

我创建了自定义中间件类来验证 JWT token 。我在配置方法中的 app.AddMvc() 之前调用此方法。 ***

我想知道应该向配置服务添加哪些内容以使用 JWT 验证我的 Web API?我在我的 Controller 类中添加了 [Authorize]

我是否需要在 Configure 方法中调用首先验证 JWT token 的中间件类?或者我应该调用 App.UseAuthentication() 我正在使用以下顺序:

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

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

最佳答案

来自 one of my answers您可以看到我们如何传递 JWT token 以及代码如何查找经典 .NET(非核心)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()
    );
});

关于c# - 如何在 aspnet.core web api 中验证 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51943722/

相关文章:

c# - SQLBulkCopy 或批量插入

c# - .net生成onclick

C# 从数组集合中删除 "partial"重复项

C# 将字符串拆分为数组,然后拆分为字典中的键值对

c# - EF Core 是否缺少 .NET Standard 与 .NET Core 库中的任何内容?

c# - WebAPI 删除 - HTTP/1.1 405 方法不允许

c# - 您可以在同一个 Web API Controller 中使用 2 个具有不同参数类型的 GET 方法吗?

linux - .NET CORE 3.0 在 Linux 上的 docker 中使用 Windows 身份验证可以工作吗?

c# - 无法在 ASP.NET Core 操作筛选器中获取正确的 DbContext 引用

asp.net - Web API 2 身份./Token 总是返回404错误