Dotnet Core-关于8.0版本中jwt的官方bug

瑞星  金牌会员 | 2024-8-28 02:53:30 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 534|帖子 534|积分 1602

缘起

自从诞生了互联网,网络安全不绝是一个没有硝烟的战场。身份验证的实现已经在历代大佬的带领下更换了很多版本。JWT是现在比力常见的身份验证机制之一。
时间有限,今天就简单的记录dotnet core升级到8.0后认证失败bug的体现与若干解决方法。以后有时间睁开讲一下JWT的实现原理。
Bug本体



  • 情况

    • .net core 8.0

  • 相关包及版本

    • Microsoft.AspNetCore.Authentication.JwtBearer - 8.0.0
    • System.IdentityModel.Tokens.Jwt - 8.0.0

  • Bug体现

    • 可以正常生成JWT,而且可以通过jwt.io正确解析验证
    • 在哀求头添附的jwt可以正确完整地传到服务器端
    • 服务器无法正常解析jwt,报错内容为
           Authentication failed: IDX14100: JWT is not well formed, there are no dots (.)
       
解决方案


  • 版本退回到7.x
  • 调整jwt的生成步骤
    2.1 jwt密钥转换为字节数组时,把Encoding.UTF8.GetBytes方法替换为Encoding.ASCII.GetBytes
    2.2 生成jwt时,检查iat,exp等的数据格式,一说是8.0版要统一为int,比如要统一为以new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
    2.3 在项目中引用Microsoft.IdentityModel.JsonWebTokens 8.0.0版本
补充

我个人除了回退版本,把以上枚举方法都试过,在我的场景,2.3方法是实用的。.net core 7微软已经正式公布在本年五月已经停止支持,所以退回版本方案预备放到实在走投无路再用。
这个问题的各种方法基本都是在github issue里翻出来的,总之这个问题是官方包升级8.0导致的兼容性bug,截止到本文落笔的最新版本8.0.8尚未修复这个问题。简单记录,渴望大家编程顺遂。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表