1. 深入理解JWT认证机制
在ASP.NET Core中实现JWT认证前,我们需要先理解其核心原理。JWT本质上是一种基于JSON的开放标准(RFC 7519),它通过数字签名确保信息传输的安全性。与传统的Session认证相比,JWT具有明显的架构优势。
1.1 JWT的结构解析
一个标准的JWT由三部分组成,用点号(.)分隔:
- Header头部:包含令牌类型和签名算法
json复制{
"alg": "HS256",
"typ": "JWT"
}
- Payload负载:包含用户声明(claims)信息
json复制{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
- Signature签名:对前两部分的签名,防止数据篡改
code复制HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
1.2 JWT的工作流程
- 客户端通过登录接口提交凭证
- 服务端验证凭证后生成JWT并返回
- 客户端在后续请求的Authorization头中携带JWT
- 服务端验证JWT有效性并处理请求
重要提示:JWT一旦签发,在有效期内将一直有效,无法中途废止。这是设计特性,也是安全考量点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ASP.NET Core中的JWT实现
2.1 基础环境配置
首先需要安装必要的NuGet包:
bash复制dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
dotnet add package System.IdentityModel.Tokens.Jwt
在appsettings.json中配置JWT参数:
json复制{
"JwtSettings": {
"Secret": "YourSecureKeyHereAtLeast32CharsLong",
"Issuer": "YourAppName",
"Audience": "YourAppUsers",
"ExpirationInMinutes": 60
}
}
2.2 核心服务实现
创建JWT服务接口和实现:
csharp复制public interface IJwtService
{
string GenerateToken(string userId, List<string> roles);
ClaimsPrincipal ValidateToken(string token);
}
public class JwtService : IJwtService
{
private readonly JwtSettings _settings;
public JwtService(IOptions<JwtSettings> settings)
{
_settings = settings.Value;
}
public string GenerateToken(string userId, List<string> roles)
{
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
};
claims.AddRange(rol
