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

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

直接上案列
引入程序集
在这里插入图片描述

第二步 建立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
        }
        /// <summary>
        /// 获取token的方法
        /// </summary>
        /// <returns></returns>
        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>();

填坑
在这里插入图片描述
错误信息: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
在这里插入图片描述

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盆友你是否很有多问号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值