JWT算法

  • Post author:
  • Post category:其他



1、定义:

JWT(Json Web Token)是现在流行的一种对 Restful 接口进行验证的机制的基础


2、JWT 的 特点:

2.1、把用户信息放到一个 JWT 字符串中,用户信息部分是明文的,再加上一部分签名区 域,签名部分是服务器对于“明文部分+秘钥”加密的,这个加密信息只有服务器端才能解 析。

2.2、用户端只是存储、转发这个 JWT 字符串。如果客户端篡改了明文部分,那么服务器端 解密时候会报错。


3、用 JWT 做权限验证的好处:

3.1、无状态,更有利于分布式系统,不需要集中的 Session 机制 服务器

3.2、可以在 nginx、CDN 等静态文件处理服务器上校验权限;获取用户信息直接从 JWT 中就可以读取,效率高


一、创建一个JwtTest控制台项目

1.1 添加Nuget包(jwt)

1.2 在Program类中实现加密的代码

            //加密的数据
            var payload = new Dictionary<string, object>
               {
                  { "UserId", 123 },
                  { "UserName", "admin" }
            };
            //加密的密钥
            var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";//不要泄露
            //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);
            Console.WriteLine(token);

1.3 在Program类中实现解密的代码

            //解密
            var token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VySWQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.Qjw1epD5P6p4Yy2yju3-fkq28PddznqRj3ESfALQy_U";
            var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";
            try
            {
                IJsonSerializer serializer = new JsonNetSerializer();
                IDateTimeProvider provider = new UtcDateTimeProvider();
                IJwtValidator validator = new JwtValidator(serializer, provider);
                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
                var json = decoder.Decode(token, secret, verify: true);
                Console.WriteLine(json);
            }
            catch (FormatException)
            {
                Console.WriteLine("Token format invalid");
            }
            catch (TokenExpiredException)
            {
                Console.WriteLine("Token has expired");
            }
            catch (SignatureVerificationException)
            {
                Console.WriteLine("Token has invalid signature");
            }



版权声明:本文为weixin_45408840原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。