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

相关推荐
故事不长丨4 小时前
C#File文件操作全解析:从基础用法到异常处理
服务器·开发语言·visualstudio·c#·文件操作·io流·file
大橙子打游戏4 小时前
OpenCode真的可以挑战Claude Code
后端
苏三说技术4 小时前
如何设计一个高并发系统?
后端
程序员鱼皮4 小时前
干掉 Claude Code,这个开源 AI 编程工具杀疯了?
前端·后端·计算机·ai·程序员
源代码•宸4 小时前
Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)
开发语言·经验分享·后端·算法·golang·go
数据小馒头5 小时前
MySQL文本处理:全库搜索慢?正则清洗难?掌握这 3 个方法
后端
工程师0075 小时前
C# 动态编程(基于 dynamic 类型)
开发语言·c#·dynamic·动态编程
星浩AI5 小时前
LCEL:打造可观测、可扩展、可部署的 LangChain 应用
人工智能·后端·python