1. 背景
用net8+JWT+Swagger,尝试做一个demo,然后就掉坑里了,折腾了好几天,都快疯了,明明可以生成JWT的token,但是使用生成的token调用接口就报Authentication failed: IDX14100: JWT is not well formed, there are no dots (.). The token needs to be in JWS or JWE Compact Serialization Format. (JWS): 'EncodedHeader.EndcodedPayload.EncodedSignature'. (JWE): 'EncodedProtectedHeader.EncodedEncryptedKey.EncodedInitializationVector.EncodedCiphertext.EncodedAuthenticationTag'.
,看看这报错,说传的token里没有(.),明明有啊!!!
然后让gpt4o检查,它也看不出什么问题,根据这段时间的体验,gpt4o的确很强大,但它只会给出模板代码,解决常规的问题,如果某个问题太奇葩,它也分析不出问题,这时候就只能靠搜索引擎了,靠互联网上广大的程序员基数,相信我不是第一个遇到的,google了一下,还真找到有人一样报错了,用我自己的理解改了一下,还真解决问题了,真是魔术一样的bug!!!
互联网上大家遇到这个问题,基本描述是说从低版本升级到net8后,本来正常的JWT代码,突然就不行了,由此大概也能推测是net8的问题,不知道改了什么,导致生成的token是正常的,但解析的时候,无法识别。
2. 解决方案
- 打开终端/命令提示符cmd,导航到你的项目目录
- 运行命令:
dotnet add package Microsoft.IdentityModel.Tokens --version 7.6.2
,版本7.6.2可能会因人而异,安装后运行尝试运行项目,看看报错来更改版本 - 这样就解决了,很简单,但就折腾了几天,有时候就是那么无奈!
over,enjoy!