JWT加密解密

Posted 后跳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JWT加密解密相关的知识,希望对你有一定的参考价值。

Nuget:Install-Package System.IdentityModel.Tokens.Jwt

加密:

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

//参数
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.NameIdentifier, "3"));
claims.Add(new Claim(ClaimTypes.Name, "zzz"));
claims.Add(new Claim(ClaimTypes.Role, "admin")); 
claims.Add(new Claim("company", "DosAuto"));


string key = "sd1a494dsa949dsa_*&*^4156dsa5e6";//服务器端秘钥

 DateTime expires=DateTime.Now.AddSeconds(30);//过期时间

//加密方法
byte[] secBytes=Encoding.UTF8.GetBytes(key);
var secKey = new SymmetricSecurityKey(secBytes);
var credentails = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256Signature);
var tokenDescript = new JwtSecurityToken(claims:claims, expires:expires, signingCredentials:credentails);
string jwt=new JwtSecurityTokenHandler().WriteToken(tokenDescript);

//输出JWT
Console.WriteLine(jwt);
Console.ReadKey();

  

解密:

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

while (true)

    Console.WriteLine("input jwt code..");
    string? s = Console.ReadLine();
    if (s==null)
    
        Console.WriteLine("input error, Please re-enter it");continue;
    

    string key = "sd1a494dsa949dsa_*&*^4156dsa5e6";//秘钥

    //解密方法
    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
    TokenValidationParameters varParam = new TokenValidationParameters();
    var securityKey=new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
    varParam.IssuerSigningKey= securityKey;
    varParam.ValidateIssuer = false;
    varParam.ValidateAudience = false; 
    ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(s, varParam, out SecurityToken secToken);
    //输出结果
    foreach (var item in claimsPrincipal.Claims)
    
        Console.WriteLine($"item.Type = item.Value");
     

 

以上是关于JWT加密解密的主要内容,如果未能解决你的问题,请参考以下文章

不了解 JWT “加密”

什么是JWT

加密 JWT 有效负载

如果没有它可以解密,那么签署jwt有啥意义

如何加密 JWT 安全令牌?

如何在 Thinktecture Identity Server 中加密 JWT 令牌?