Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# jwt

作者:末世修罗   发布日期:2026-04-17   浏览:50

using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

public class JwtTokenGenerator
{
    private readonly string _secretKey;

    public JwtTokenGenerator(string secretKey)
    {
        _secretKey = secretKey;
    }

    // 生成JWT Token
    public string GenerateToken(string username, DateTime expiration)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes(_secretKey);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, username)
            }),
            Expires = expiration,
            SigningCredentials = new SigningCredentials(
                new SymmetricSecurityKey(key),
                SecurityAlgorithms.HmacSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        return tokenHandler.WriteToken(token);
    }

    // 验证JWT Token
    public ClaimsPrincipal ValidateToken(string token)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes(_secretKey);

        try
        {
            tokenHandler.ValidateToken(token, new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false,
                ClockSkew = TimeSpan.Zero
            }, out SecurityToken validatedToken);

            return tokenHandler.ValidateToken(token, new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false,
                ClockSkew = TimeSpan.Zero
            }, out _);
        }
        catch
        {
            return null;
        }
    }
}

解释说明

  1. JwtTokenGenerator 类:

    • 该类用于生成和验证 JWT (JSON Web Token)。
    • GenerateToken 方法用于生成一个带有用户名和过期时间的 JWT。
    • ValidateToken 方法用于验证传入的 JWT 是否有效。
  2. 依赖库:

    • 使用了 System.IdentityModel.Tokens.JwtMicrosoft.IdentityModel.Tokens 库来处理 JWT 的生成和验证。
  3. 密钥管理:

    • _secretKey 是用于签名和验证 JWT 的密钥,必须在应用程序中妥善保管。
  4. Claims:

    • 在生成 JWT 时,我们添加了一个 Claim,表示用户名。可以根据需要添加更多 Claim
  5. 验证参数:

    • 在验证 JWT 时,设置了 ValidateIssuerValidateAudiencefalse,这意味着我们不关心谁签发了这个 Token 或者它是为谁签发的。根据实际需求可以调整这些参数。

希望这段代码和解释对你有帮助!

上一篇:c#获取时间戳

下一篇:c# 获取当前时间戳

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站