JWT帮助类(相关方法)

Posted igqx

tags:

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

注意:首先安装JWT程序包

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using JWT;
using JWT.Algorithms; //加密算法
using JWT.Builder;
using JWT.Exceptions;
using JWT.Serializers;


namespace WebApplication1.Models
{
  public class JWTHelper
  {
    private string Key { get; set; } = "bfdhargrtjuykreawtuyjtretryjgafasdgrth";// 这个密钥
    private IJwtAlgorithm algorithm { get; set; } // 这是 HMACSHA256加密算法
    private IJsonSerializer serializer { get; set; }// 这是JSON序列化工具
    private IBase64UrlEncoder urlEncoder { get; set; } // 这是BASE64编码工具
    private IDateTimeProvider provider { get; set; }// 时间提供器 用来提供 格式一致的时间
    private IJwtValidator validator { get; set; }

    public JWTHelper()
    {
      Key = "klklergsflergldsarertlherdsigerklgld";// 这个密钥
      algorithm = new HMACSHA256Algorithm(); // 这是 HMACSHA256加密算法
      serializer = new JsonNetSerializer();// 这是JSON序列化工具
      urlEncoder = new JwtBase64UrlEncoder(); // 这是BASE64编码工具
      provider = new UtcDateTimeProvider(); // 时间提供器
      validator = new JwtValidator(serializer, provider); // 令牌校验器,用来验证有效期和签名
    }
    //加密
    public string GetToken(Dictionary<string, object> payload,int expSeconds)
    {
      var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch
      var now = provider.GetNow();
      payload["exp"] = Math.Round((now - unixEpoch).TotalSeconds) + expSeconds;// exp 有效期
      IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);// JWT加密工具
      var token = encoder.Encode(payload, Key); // 加密生成TOKEN
      return token;
    }
    // 解密
    public string GetPayload(string token)
    {
      try
      {
        IJwtDecoder decoder = new JwtDecoder(serializer,validator, urlEncoder, algorithm); // 创建解密工具
        var json = decoder.Decode(token, Key, verify: true);//token 中的载体的 JSON 格式字符串
        return json; // payload
      }
      catch (TokenExpiredException)
      {
        Console.WriteLine("Token has expired");
        return null;
      }
      catch (SignatureVerificationException)
      {
        Console.WriteLine("Token has invalid signature");
        return null;
      }
    }
  }
}

 

作者还在学习中,发现错误的请在评论区留言。  如果有客友觉得文章还行的话,请点波推荐哦??。 谢谢你们!!

以上是关于JWT帮助类(相关方法)的主要内容,如果未能解决你的问题,请参考以下文章

反射机制--调用构造函数和成员方法制作帮助文档

Class类相关

SpringBoot集成JWT实现Token登录验证

Class类

Proxmark3命令帮助

onclick 帮助 - 读取特定类的值