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 版权协议,转载请附上原文出处链接和本声明。
