JWT的那些事!!!

最近在通过实践来完善自己的理论知识

发现自己会说的时候,只是明白了片面的运行,当自己操作起来后,才发现所谓自己认为的东西可能有纰漏,接下来  言归正传

使用JWT是为了对用户的账号进行安全的防范,从而起到保护用户个人账号也保护了程序的安全

JWT分为几步骤:

  • 创建秘钥,通过程序中固定的秘钥,对每个用户生成自己的Token令牌,这个令牌不会进行传输也不会暴露,除非程序被拔走等;

        在配置中存放秘钥等固定的信息

  • 生成JWT程序逻辑类并在此类所在的库中引用JWT使用的NuGet包文件(如果使用一下的代码需要引用这两项包)

  • 这个是我扒过来的代码,使用的HmacSha256算法
public string GetToken(string name)
        {
            var signingAloorithm = SecurityAlgorithms.HmacSha256;//Header 选择签名算法
            var claims = new[] {
                new Claim(JwtRegisteredClaimNames.Sub,"userId")
            };//载荷payload 存放用户信息以及Id;

            //signature  
            var secretByte = Encoding.UTF8.GetBytes(configuration["AuthenticationDemo:SecretKeyDemo"]);
            //使用非杜晨算法对私钥进行加密
            var signingKey= new SymmetricSecurityKey(secretByte);
            //使用HmacSha256来验证加密后的私钥生成数字签名
            var signingCreadentials = new SigningCredentials(signingKey, signingAloorithm);
            //生成Token
            var Tokens = new JwtSecurityToken(
                issuer: configuration["AuthenticationDemo:IssuerDemo"],     //发布者
                audience: configuration["AuthenticationDemo:AudienceDemo"], //接受者
                claims: claims,                                             //存放的用户信息
                notBefore: DateTime.Now,                                    //发布时间
                expires:DateTime.UtcNow.AddDays(1),                         //有效期设置为1天
                signingCreadentials                                         //数字签名
                );

            //生成字符串token
            var TokenStr = new JwtSecurityTokenHandler().WriteToken(Tokens);

            return TokenStr;
        }

注意:

这里我遇到了一个坑,HS256它的算法使用的256字节(32位)编码格式,所以你的秘钥一定要超过或者等于32位,应为是一个字母一位,一个汉字2位,使用汉字是可以的(本人已尝试),如果少了回报一下问题

Char GPT解释:

  1. 密钥大小不符合要求:根据错误消息中的信息,使用的密钥算法是 ‘HS256’,它要求密钥的大小必须大于 256 位(32 字节)。然而,提供的密钥大小为 224 位(28 字节),不符合要求。你需要提供一个 256 位或更长的密钥进行正确的操作。

  2. 密钥字节参数错误:根据错误消息中提到的 ‘Parameter ‘keyBytes’’,似乎在密钥的字节数组参数上出现了错误。可能是提供的字节数组长度与密钥算法不匹配,或者在传递密钥时发生了其他错误。

要解决这个问题,你可以采取以下步骤:

  • 确保提供的密钥的大小符合算法的要求。对于 ‘HS256’ 算法,建议使用 256 位(32 字节)的密钥长度。
  • 确保提供的密钥以正确的形式传递给密钥算法,可能需要将密钥从其他格式(如字符串)转换为字节数组,并确保字节数组的长度正确。

如果你的密码会出现在Token中,建议将密码进行加密后再进行Token生成,这样就算是安心了!!!

以上是JWT相关的资料希望对各位有帮助!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值