1. Microsoft.AspNetCore.Authentication.JwtBearer
(8.0.10)
这是 ASP.NET Core 官方提供的用于处理 JWT Bearer 认证的包。它的主要作用是将 JWT 认证集成到 ASP.NET Core 的认证系统中。
主要功能:
-
JWT 认证中间件:提供了一个中间件,用于验证传入的 JWT 令牌。
-
认证方案 :支持将 JWT 认证作为一个认证方案(
JwtBearerDefaults.AuthenticationScheme
)。 -
配置选项:允许配置 JWT 认证的参数,如令牌验证参数、颁发者、受众等。
典型用法:
在 Startup.cs
或 Program.cs
中配置 JWT 认证:
csharp
复制
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
});
2. Microsoft.IdentityModel.Tokens
(8.3.1)
这是 Microsoft 提供的用于处理安全令牌(如 JWT)的核心库。它提供了用于创建、验证和解析安全令牌的基础功能。
主要功能:
-
令牌验证:提供验证 JWT 令牌的机制,包括签名验证、有效期检查等。
-
密钥管理:支持对称密钥和非对称密钥的创建和管理。
-
令牌解析:提供解析 JWT 令牌的功能,提取声明(Claims)等信息。
典型用法:
在配置 JWT 认证时,TokenValidationParameters
类(来自此包)用于定义令牌验证的规则:
csharp
复制
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
3. System.IdentityModel.Tokens.Jwt
(8.3.1)
这是用于处理 JWT 令牌的库,提供了创建、解析和验证 JWT 的功能。它是 Microsoft.IdentityModel.Tokens
的一部分,专注于 JWT 的实现。
主要功能:
-
JWT 创建:支持生成 JWT 令牌。
-
JWT 解析:支持解析 JWT 令牌并提取声明(Claims)。
-
JWT 验证:支持验证 JWT 令牌的签名、有效期等。
典型用法:
生成 JWT 令牌:
csharp
复制
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "your-issuer",
audience: "your-audience",
claims: new List<Claim> { new Claim(ClaimTypes.Name, "username") },
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials
);
var tokenHandler = new JwtSecurityTokenHandler();
var tokenString = tokenHandler.WriteToken(token);
4. 这些包的关系
-
Microsoft.AspNetCore.Authentication.JwtBearer
:依赖于Microsoft.IdentityModel.Tokens
和System.IdentityModel.Tokens.Jwt
,用于将 JWT 认证集成到 ASP.NET Core 中。 -
Microsoft.IdentityModel.Tokens
:提供通用的安全令牌处理功能,是System.IdentityModel.Tokens.Jwt
的基础。 -
System.IdentityModel.Tokens.Jwt
:专注于 JWT 的实现,提供 JWT 的创建、解析和验证功能。
5. 典型工作流程
-
生成 JWT 令牌:
-
使用
System.IdentityModel.Tokens.Jwt
创建 JWT 令牌。 -
示例:
csharp
复制
var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); var tokenString = tokenHandler.WriteToken(token);
-
-
验证 JWT 令牌:
-
使用
Microsoft.AspNetCore.Authentication.JwtBearer
配置 JWT 认证中间件。 -
示例:
csharp
复制
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { // 配置验证参数 }; });
-
-
解析 JWT 令牌:
-
使用
System.IdentityModel.Tokens.Jwt
解析 JWT 令牌并提取声明。 -
示例:
csharp
复制
var tokenHandler = new JwtSecurityTokenHandler(); var jwtToken = tokenHandler.ReadJwtToken(tokenString); var claims = jwtToken.Claims;
-
6. 总结
-
Microsoft.AspNetCore.Authentication.JwtBearer
:用于将 JWT 认证集成到 ASP.NET Core 中。 -
Microsoft.IdentityModel.Tokens
:提供通用的安全令牌处理功能。 -
System.IdentityModel.Tokens.Jwt
:专注于 JWT 的实现,提供创建、解析和验证 JWT 的功能。
这些包共同协作,使得在 ASP.NET Core 中实现基于 JWT 的身份验证和授权变得简单而高效。