.net core 3.1JWT用户权限认证(二)获取token

.net core 3.1JWT用户权限认证(二)获取token

直接上案列
引入程序集
.net core 3.1JWT用户权限认证(二)获取token_第1张图片

第二步 建立token接口,和token实现类

 public interface IJwtTokenService
    {
         //获取token的方法
        public string GetToken();
    }
  public class JwtTokenService : IJwtTokenService
    {

        private readonly IConfiguration _configuration;
        public JwtTokenService(IConfiguration configuration)
        {
            _configuration = configuration;//获取appsetting专用IConfiguration
        }
        /// 
        /// 获取token的方法
        /// 
        /// 
        public string GetToken()
        {
            //创建jwt 三个部分 header,payload,signiture
            //header:
            var signingAlgorithm = SecurityAlgorithms.HmacSha256;//256加密格式
            //payload: 可以加很多东西,自定义的都可以 这里用claim

            var claims = new[] {
               new Claim(JwtRegisteredClaimNames.Sub,"11111111")  //键值对的形式            
            };

            //signiture
            //获取配置文件的私钥
            var secretByte = Encoding.UTF8.GetBytes(_configuration["Authentication:SecretKey"]);
            //加密私钥
            var signingKey = new SymmetricSecurityKey(secretByte);
            //验证私钥
            var signingCredentials = new SigningCredentials(signingKey, signingAlgorithm);
            //产生token
            var token = new JwtSecurityToken(
                  issuer: _configuration["Authentication:Issuer"],
                audience: _configuration["Authentication:Audience"],
                  claims,
                notBefore: DateTime.UtcNow,//发布时间
                expires: DateTime.UtcNow.AddMinutes(2),//过期时间,这里是2分钟
                signingCredentials//防伪标志

                );
            //输出token
            var tokenStr = new JwtSecurityTokenHandler().WriteToken(token);
            return tokenStr;



        }
    }

配置文件内容

"Authentication": {
    "SecretKey": "123456789qwertyuiop",
    "Issuer": "qwertyuiop",
    "Audience": "qwertyuiop"
  }

最后把服务注册到自带的IServiceCollection

  services.AddScoped<IJwtTokenService, JwtTokenService>();

填坑
.net core 3.1JWT用户权限认证(二)获取token_第2张图片
错误信息:System.ArgumentOutOfRangeException:“IDX10603: Decryption failed. Keys tried: ‘[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]’.
Exceptions caught:
‘[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]’.
token: ‘[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]’ ”

讲道理这个错误信息真的看不懂
为了让错误信息更加的简单明了我们在startup文件中的Configure
中增加

    IdentityModelEventSource.ShowPII = true; 

再次运行错误信息就变成了
System.ArgumentOutOfRangeException:“IDX10603: Decryption failed. Keys tried: ‘HS256’.
Exceptions caught:
‘128’.
token: ‘96’ ”

问题原因就是:在设置配置文件SecretKey中的值的时候给的太短了,官方要求必须大于等于16个字符

再次运行 成功获取到token
.net core 3.1JWT用户权限认证(二)获取token_第3张图片

可以把获取刀的token拿到jwt官网去解析。这里就不做了

你可能感兴趣的:(.net,core,3.1,Web)