Skip to content

[TOC]

安装相关包

System.IdentityModel.Tokens.Jwt

解密加密如下:

C


        [HttpGet("Jwt")]
        public IActionResult Jwt()
        {
            var claims = new List<Claim>();  
            claims.Add(new Claim(ClaimTypes.NameIdentifier, "6")); //一个Claim就代表一条用户信息,new Claim(type,value),type可以重复
            claims.Add(new Claim(ClaimTypes.Name, "yzk"));
            claims.Add(new Claim(ClaimTypes.Role, "User"));
            claims.Add(new Claim(ClaimTypes.Role, "Admin"));
            claims.Add(new Claim("PassPort", "E90000082"));//自定义

            string key = "fasdfad&9045dafz222#fadpio@0232 this_is_a_very_long_secret_key_32b";//密钥
            DateTime expires = DateTime.Now.AddDays(1);//客户端时间
            byte[] secBytes = Encoding.UTF8.GetBytes(key);//将密钥二进制
            var secKey = new SymmetricSecurityKey(secBytes);//创建签名密钥
            var credentials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256Signature);//定义签名算法和密钥
            var tokenDescriptor = new JwtSecurityToken(claims: claims,
                expires: expires, signingCredentials: credentials);
            string jwt = new JwtSecurityTokenHandler().WriteToken(tokenDescriptor); //生成最终的 JWT 字符串(header.payload.signature)
 
            return Ok(jwt);
        }
        [HttpPost(" ReJwt")]
        public IActionResult ReJwt(string jwt)
        { 
                string secKey = "fasdfad&9045dafz222#fadpio@0232";
              secKey = "fasdfad&9045dafz222#fadpio@0232 this_is_a_very_long_secret_key_32b";//密钥

            JwtSecurityTokenHandler tokenHandler = new();
            TokenValidationParameters valParam = new();
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secKey));
            valParam.IssuerSigningKey = securityKey;
            valParam.ValidateIssuer = false;
            valParam.ValidateAudience = false;
                ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(jwt,
                        valParam, out SecurityToken secToken);
            // 方法:用数组初始化器 + ToList()
            var strss = new[] { new { type = "", value = "" } }.ToList();

            foreach (var claim in claimsPrincipal.Claims)
            {
                //Console.WriteLine($"{claim.Type}={claim.Value}");
                strss.Add(new { type = claim.Type, value = claim.Value });
            } 
             
            return Ok(strss); 
        }