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

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

缘起

自从诞生了互联网,网络安全一直是一个没有硝烟的战场。身份验证的实现已经在历代大佬的带领下更换了很多版本。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 (.)

解决方案

  1. 版本退回到7.x
  2. 调整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尚未修复这个问题。简单记录,希望大家编程顺利。

相关推荐
8年车载测试6 小时前
车载测试中如何通过 Jira 平台提交 Bug:操作步骤与关键要点
bug·jira·uds诊断·hil测试·uds自动化测试·ecu刷写测试·canoe工具
波力海苔夹心脆67513 小时前
C# StringBuilder 详解:字符串拼接为什么总说要用它?
开发语言·笔记·c#·.net·字符串·stringbuilder·入门教程
硅基手札13 小时前
SPI技术系列 13 · SPI 调试与排查
linux·运维·stm32·单片机·嵌入式硬件·bug
1-1=014 小时前
.NET Core 输出日志
c#·.net·.netcore
李永奉16 小时前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦通话语音算法后,设置触摸音在唤醒语音助手和通话时触摸音没作用问题
单片机·嵌入式硬件·mcu·物联网·电脑·bug
IT规划师16 小时前
MQTT实战 - 生产环境MQTT丢包终极排查,8年经验总结(六)
物联网·.net
Elastic 中国社区官方博客2 天前
Observability:当 YAML 遇上 IConfiguration:OpenTelemetry .NET SDK 的声明式配置
大数据·开发语言·elasticsearch·搜索引擎·全文检索·.net
kyle~3 天前
机器人通信 --- FANUC TCP 并发请求-响应错位 Bug 复盘
tcp/ip·机器人·bug
1-1=04 天前
.NET 实现后台任务
c#·.net·.netcore·quartz·hangfire