You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core 5 Web API中实现JWT认证的正确NuGet包选择

ASP.NET Core Web API JWT认证:两个NuGet包的选择指南

嘿,这个问题太常见了——刚上手ASP.NET Core JWT认证的朋友几乎都会卡在这两个包的选择上,我给你掰扯清楚:

先搞懂两个包各自的定位

  • System.IdentityModel.Tokens.Jwt:这是处理JWT令牌的「核心工具库」,管的是JWT的生成、解析、签名验证这些底层事儿。比如你要手动创建一个带用户声明的JWT,或者把前端传过来的令牌拆开来读里面的信息,都得靠它的类(比如JwtSecurityTokenHandlerJwtSecurityToken)。但它本身和ASP.NET Core的认证管道不挂钩,没法直接帮你保护API接口。
  • Microsoft.AspNetCore.Authentication.JwtBearer:这是专门为ASP.NET Core打造的「JWT认证中间件」,它依赖于System.IdentityModel.Tokens.Jwt,负责把JWT认证逻辑嵌入到ASP.NET Core的请求管道里。比如你在Program.cs里写的AddAuthentication().AddJwtBearer(...)就是它的活儿——它会自动检查请求头里的Bearer令牌,验证令牌的合法性,把用户信息塞进HttpContext.User,让你能用[Authorize]注解轻松保护API接口。

你的场景下该怎么选?

ASP.NET Core Web API实现JWT认证这个场景里:

  1. 如果你要搭建完整的认证体系(既生成令牌给客户端,又要在API端验证令牌、保护接口),只需要安装Microsoft.AspNetCore.Authentication.JwtBearer就够了——NuGet会自动帮你把依赖的System.IdentityModel.Tokens.Jwt也安装好,不用手动装两个。
  2. 当然,如果你的项目里有单独的令牌生成逻辑(比如一个独立的身份服务,不是Web API),那单独装System.IdentityModel.Tokens.Jwt就行,用来生成令牌。

举个实际代码例子,你配置认证的时候会用到:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    });

这里的AddJwtBearer来自Microsoft.AspNetCore.Authentication.JwtBearer,而TokenValidationParametersSymmetricSecurityKey这些类都来自System.IdentityModel.Tokens.Jwt——但你只需要装前者,后者会自动被引入。

总结

简单说:在ASP.NET Core Web API里做JWT认证,优先装Microsoft.AspNetCore.Authentication.JwtBearer,它是专门为这个场景设计的集成方案,底层已经帮你封装了System.IdentityModel.Tokens.Jwt的功能,不用额外操心。

内容的提问来源于stack exchange,提问作者Ivoryguard

火山引擎 最新活动