当前位置: 首页 > news >正文

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

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

  • 缘起
  • 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时,检查iatexp等的数据格式,一说是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尚未修复这个问题。简单记录,希望大家编程顺利。


http://www.mrgr.cn/news/11711.html

相关文章:

  • BC156 牛牛的数组匹配(c语言)
  • 【C/C++】typedef用法
  • SpringCloudGateway重写负载均衡策略
  • CSS 中处理文本溢出并隐藏它
  • 论文笔记:Large Language Models are Zero-Shot Next LocationPredictors
  • 【笔记】数据结构——8月27日
  • 【工具类】Java优雅的将XML转为JSON格式、XML转JSON
  • MySQL面试技术(分页)
  • OpenCV几何图像变换(10)透视变换函数warpPerspective()的使用
  • 算法学习-基础数据结构
  • JUnit 5和Mockito进行单元测试!
  • 【分布式架构幂等性总结】
  • 服务器五大关键组件拆解分析
  • 硬链接和软连接
  • 02- javascript 高阶-构造函数(知识点)呀
  • matlab如何设置产生的随机数一致
  • kubernetes基础知识扫盲
  • 网络防火墙的主要功能及其弊端
  • 终端防火墙软件哪个好?2024年内网安全解决方案!
  • 读取FTP中不同文件格式的文件流后导出到浏览器