asp.netcore 有关jwt的依赖包介绍

1. Microsoft.AspNetCore.Authentication.JwtBearer (8.0.10)

这是 ASP.NET Core 官方提供的用于处理 JWT Bearer 认证的包。它的主要作用是将 JWT 认证集成到 ASP.NET Core 的认证系统中。

主要功能:
  • JWT 认证中间件:提供了一个中间件,用于验证传入的 JWT 令牌。

  • 认证方案 :支持将 JWT 认证作为一个认证方案(JwtBearerDefaults.AuthenticationScheme)。

  • 配置选项:允许配置 JWT 认证的参数,如令牌验证参数、颁发者、受众等。

典型用法:

Startup.csProgram.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.TokensSystem.IdentityModel.Tokens.Jwt,用于将 JWT 认证集成到 ASP.NET Core 中。

  • Microsoft.IdentityModel.Tokens :提供通用的安全令牌处理功能,是 System.IdentityModel.Tokens.Jwt 的基础。

  • System.IdentityModel.Tokens.Jwt:专注于 JWT 的实现,提供 JWT 的创建、解析和验证功能。


5. 典型工作流程

  1. 生成 JWT 令牌

    • 使用 System.IdentityModel.Tokens.Jwt 创建 JWT 令牌。

    • 示例:

      csharp

      复制

      复制代码
      var tokenHandler = new JwtSecurityTokenHandler();
      var token = tokenHandler.CreateToken(tokenDescriptor);
      var tokenString = tokenHandler.WriteToken(token);
  2. 验证 JWT 令牌

    • 使用 Microsoft.AspNetCore.Authentication.JwtBearer 配置 JWT 认证中间件。

    • 示例:

      csharp

      复制

      复制代码
      services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
          .AddJwtBearer(options =>
          {
              options.TokenValidationParameters = new TokenValidationParameters
              {
                  // 配置验证参数
              };
          });
  3. 解析 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 的身份验证和授权变得简单而高效。

相关推荐
晚霞的不甘28 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
喵叔哟39 分钟前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707781 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
Charlie_lll1 小时前
力扣解题-移动零
后端·算法·leetcode
初级代码游戏1 小时前
套路化编程 C# winform 自适应缩放布局
开发语言·c#·winform·自动布局·自动缩放
打工的小王2 小时前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
大空大地20263 小时前
流程控制语句--switch多分支语句使用、while循环语句的使用、do...while语句、for循环
c#
80530单词突击赢4 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法4 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy4 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端