首页 > 编程语言 >Jwt 算法的封装

Jwt 算法的封装

时间:2023-02-21 21:34:22浏览次数:46  
标签:urlEncoder 封装 Jwt token return 算法 var new serializer

public class JwtEncode
{
    /// <summary>
    /// 获取token
    /// </summary>
    /// <param name="args"></param>
    /// <returns>token</returns>
    /// <exception cref="ArgumentException"></exception>
    public static string JwtEncoding(Dictionary<string, object> args)
    {
        var payload = args.Count == 0 ? throw new ArgumentException($"{nameof(args)}长度为0") : args;
        var secret = ConfigurationManager.AppSettings["Jwt"];
        IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
        IJsonSerializer serializer = new JsonNetSerializer();
        IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
        IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
        var token = encoder.Encode(payload, secret);
        return token;
    }
    /// <summary>
    /// 解token
    /// </summary>
    /// <param name="token">token</param>
    /// <returns></returns>
    public static Dictionary<string, object> JwtDecoding(string token)
    {
        Dictionary<string, object> data = null;
        try
        {
            var secret = ConfigurationManager.AppSettings["Jwt"];
            var serializer = new JsonNetSerializer();
            var algorithm = new HMACSHA256Algorithm();
            IDateTimeProvider provider = new UtcDateTimeProvider();
            IJwtValidator validator = new JwtValidator(serializer, provider);
            var urlEncoder = new JwtBase64UrlEncoder();
            IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);
            var json = decoder.Decode(token, secret, verify: true);
            data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
        }
        catch (TokenExpiredException)
        {
            Console.WriteLine("Token has expired");
            return null;
        }
        catch (SignatureVerificationException)
        {
            Console.WriteLine("Token has invalid signature");
            return null;
        }
        catch (Exception e)
        {
            return null;
        }
        return data;
    }
}

标签:urlEncoder,封装,Jwt,token,return,算法,var,new,serializer
From: https://www.cnblogs.com/snail-wn/p/17142525.html

相关文章

  • 封装
    赋值打印值定义girls类packagecom.fqs.demo1;publicclassGirls{//私有的属性privateStringname;//set//getpublicvoids......
  • 基于EM算法的参数辨识和分类识别算法matlab仿真
    1.算法描述EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器......
  • 基于matlab的AES加解密算法仿真
    1.算法描述AES算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。这些明文块经过AES加密器复......
  • 代码随想录算法训练营Day21 二叉树
    代码随想录算法训练营代码随想录算法训练营Day21二叉树|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先530.二叉搜索树的最小绝对差......
  • 基于matlab的AES加解密算法仿真
    1.算法描述        AES算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。这些明文......
  • 基于EM算法的参数辨识和分类识别算法matlab仿真
    1.算法描述       EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变......
  • 【算法训练营day53】LeetCode1143. 最长公共子序列 LeetCode1035. 不相交的线 LeetCod
    LeetCode1143.最长公共子序列题目链接:1143.最长公共子序列独上高楼,望尽天涯路和之前那道题思路又不太一样了,第一次接触还是挺难想出来的。慕然回首,灯火阑珊处首先是......
  • 代码随想录算法训练营第十六天 lc104.二叉树的最大深度 | lc111.二叉树的最小深度 | l
    lc104二叉树的最大深度首先需要知道深度与高度的区别,对于一个二叉树中的节点深度:根节点到该节点的距离高度:该节点到最底层叶节点的距离而求最大深度无异于求根节点......
  • 瞎聊机器学习——K-均值聚类(K-means)算法
    本文中我们将会聊到一种常用的无监督学习算法——K-means。1、K-means算法的原理K-means算法是一种迭代型的聚类算法,在算法中我们首先要随机确定K个初始点作为质心,然后去计......
  • 通过例子学习粒子群优化算法
    粒子群优化算法简介粒子群优化算法(ParticleSwrmOptimization,PSO)是由美国的J.Kenney和R.C.Eberhart于1995年提出。它是基于鸟群社会行为的模拟而发展起来的一种群体随......