完整的错误是:

‘无法反序列化密钥数据.数据的格式可能不正确,可能是使用不受支持的算法加密的,或者可能是不受支持的密钥类型(例如,带有显式参数的EC曲线).’,[_OpenSSLErrorWithText(CODE=75497580,LIB=9,REASON=108,REASON_TEXT=b‘错误:0480006C:PEM routine ::无起始行’)]‘.

当我将令牌粘贴到https://jwt.io/中(它还显示RS256是算法)时,它工作得很好,但当我运行以下代码时:

import jwt
jwt.decode('eyJ0..............', algorithms=['RS256'])

我得到了上面的错误.我做错了什么?令牌是使用MSAL-Browser NPM包中的quireSilentToken方法通过MSAL包生成的.

推荐答案

进一步挖掘,我能够通过使用在jwt.io上生成的模拟JWT来复制您的问题.

从回溯来看,问题似乎与密钥格式(而不是JWT格式)有关.

jwt.decodekey参数是可选的,缺省值是空字符串.这是因为只有在选项verify_signature为真的情况下才使用它. 不幸的是,该选项的缺省值是True,因此您的代码试图使用无效的公钥(空字符串)来验证JWT的签名.

如果您不需要验证签名,则只需相应地设置选项:

import jwt

jwt.decode(
    'eyJ0..............',
    algorithms=['RS256'],
    options={"verify_signature": False},
)

Python相关问答推荐

Polars LazyFrame在收集后未返回指定的模式顺序

在np数组上实现无重叠的二维滑动窗口

Python—从np.array中 Select 复杂的列子集

实现自定义QWidgets作为QTimeEdit的弹出窗口

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

当点击tkinter菜单而不是菜单选项时,如何执行命令?

Python中的变量每次增加超过1

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如何在PySide/Qt QColumbnView中删除列

python中csv. Dictreader. fieldname的类型是什么?'

为什么'if x is None:pass'比'x is None'单独使用更快?

在Python中从嵌套的for循环中获取插值

pandas:在操作pandora之后将pandora列转换为int

使用Python异步地持久跟踪用户输入

数据框,如果值在范围内,则获取范围和

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

查找查找表中存在的列值组合

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

如何在Polars中处理用户自定义函数的多行结果?

ValueError:必须在Pandas 中生成聚合值