.net中jwt验证
时间: 2025-05-14 22:17:47 浏览: 9
### .NET 中实现 JWT 验证的方法
在现代 Web 开发中,JSON Web Token (JWT) 是一种轻量级的标准方法,用于在网络应用之间安全地传输信息。它通常被用来进行用户的身份验证以及数据交换。以下是关于如何在 .NET 平台中实现 JWT 身份验证的具体方法。
#### 1. 安装必要的 NuGet 包
为了支持 JWT 的解析和签名操作,在项目中需要安装 `Microsoft.IdentityModel.Tokens` 和其他相关包。这些工具提供了生成、读取和验证 JWT 所需的功能[^2]。
可以通过以下命令安装所需的依赖项:
```bash
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
dotnet add package Microsoft.IdentityModel.Tokens
```
#### 2. 配置服务与中间件
在 ASP.NET Core 应用程序的 `Startup.cs` 或者新的 `.NET 6/7/8` 结构下的 `Program.cs` 文件中,需要注册并配置 JWT 认证的服务:
```csharp
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Token:Secret"])),
ValidateIssuer = false, // 可选:如果不需要校验签发方,则设为false
ValidateAudience = false, // 可选:如果不需要校验接收方,则设为false
ClockSkew = TimeSpan.Zero // 设置时间偏移容忍度,默认为5分钟
};
});
```
上述代码片段展示了如何通过 `AddJwtBearer` 方法来启用 JWT Bearer 身份验证,并设置了密钥以及其他参数以确保令牌的有效性和安全性[^1]。
#### 3. 创建控制器保护 API 端点
一旦完成了上面的基础配置工作之后,就可以利用 `[Authorize]` 属性标记那些受保护的资源或者动作方法。这样做的目的是让未经过身份验证的请求无法访问指定的内容。
例如定义一个简单的 WeatherForecast 控制器如下所示:
```csharp
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = { "Freezing", "Bracing", "Chilly" };
[HttpGet(Name = "GetWeatherForecast")]
[Authorize(Roles = "Admin")] // 此处限制仅允许 Admin 用户访问该接口
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
```
这里我们还额外加入了角色授权的支持,即只有拥有 “Admin” 权限级别的已登录用户才能够调用这个 HTTP GET 请求。
#### 4. 发放有效的 JSON Web Tokens
最后一步就是当合法用户的凭证得到确认以后,服务器端应该返回给客户端一张带有有效载荷(Payload)及签名(Signature)部分组成的完整 token 字符串形式表示的对象实例化过程如下:
```csharp
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Token:Secret"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Role, "Admin") // 添加角色声明以便后续做权限控制
};
var token = new JwtSecurityToken(
issuer: _config["Token:Issuer"],
audience: _config["Token:Audience"],
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token)});
```
以上代码说明了怎样构建自定义负载并将它们嵌入到最终产生的 jwt 当中去。
---
### 总结
综上所述,在 .NET 框架下集成 JWT 身份验证并不复杂,只需按照官方文档指导完成几个关键步骤即可达成目标。这不仅提高了系统的整体安全性,同时也简化了许多跨平台场景下的交互流程。
阅读全文
相关推荐


















