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 的身份验证和授权变得简单而高效。

相关推荐
星如雨グッ!(๑•̀ㅂ•́)و✧9 分钟前
Spring Boot 2 快速教程:WebFlux处理流程(五)
java·spring boot·后端
阿乾之铭37 分钟前
Spring Boot框架下的单元测试
spring boot·后端·单元测试
计算机-秋大田1 小时前
基于SpringBoot的信息技术知识赛系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
java·vue.js·spring boot·后端·课程设计
xidianjiapei0011 小时前
如何在5步内使用 Spring AI 和 OpenAI 的 DALL-E 3 生成图像
java·人工智能·后端·spring·语言模型·openai
谦行1 小时前
前端视角 Java Web 入门手册 2.3:Array
java·后端
喜欢猪猪1 小时前
高并发、高可用的消息队列(MQ)设计与实战
开发语言·后端·ruby
码农小旋风1 小时前
类文件结构
后端
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS医院后台管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
安清h1 小时前
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户登录
java·后端·mysql·spring
谢大旭3 小时前
ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
开发语言·后端·c#·asp.net