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

相关推荐
Java&Develop1 小时前
springboot 集成kerberos 用户认证 获取域账号
java·spring boot·后端
会飞的架狗师1 小时前
【SpringBoot实战指南】使用 Spring Cache
spring boot·后端·spring·缓存
努力也学不会java3 小时前
【RabbitMQ】 RabbitMQ高级特性(二)
java·分布式·后端·中间件·rabbitmq
头发那是一根不剩了5 小时前
Spring Boot 注解 @ConditionalOnMissingBean是什么
java·spring boot·后端
豆约翰5 小时前
c#和python互操作实现排序算法可视化
python·c#·排序算法
江沉晚呤时6 小时前
GraphQL在.NET 8中的全面实践指南
microsoft·ui·c#·.net·.netcore·graphql
进击的愤怒6 小时前
GIM发布新版本了 (附rust CLI制作brew bottle流程)
开发语言·后端·rust
x-cmd6 小时前
x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
开发语言·后端·rust·cargo·示例
smileNicky7 小时前
SpringBoot系列之OpenAI API 创建智能博客评论助手
java·spring boot·后端
程序员阿明9 小时前
spring boot 实现rtsp视频推流
spring boot·后端·音视频