使用Python生成GitHub App的JWT时遭遇ValueError: "Could not deserialize key data"错误
使用Python生成GitHub App的JWT时遭遇ValueError: "Could not deserialize key data"错误
看起来你遇到的是密钥解析类的问题,我来帮你排查几个常见的原因和对应的解决办法:
1. 你大概率装错了JWT库!
你执行了pip3 install jwt,但这个是一个和官方推荐的PyJWT无关的第三方包,而GitHub文档里的代码是针对PyJWT(正确包名是pyjwt)编写的。两个库的API虽有相似,但底层密钥处理逻辑差异很大,这是导致解析失败的高频原因。
请卸载错误的库,安装带加密扩展的正确版本:
pip3 uninstall jwt pip3 install pyjwt[crypto]
2. 检查你的PEM私钥文件格式是否合规
GitHub App下载的私钥是标准RSA私钥格式,请确认:
- 文件开头必须是
-----BEGIN RSA PRIVATE KEY-----,结尾是-----END RSA PRIVATE KEY-----(注意连字符和大小写,不能缺失或写错) - 密钥内容没有被截断、添加多余空行/空格,每一行长度应该在64字符左右(最后一行可稍短)
- 直接打开文件确认无乱码,比如复制私钥时有没有漏行
3. 确认密钥未被加密
如果你的PEM文件里包含DEK-Info字样的行,说明密钥被设置了密码加密。但GitHub App生成的私钥默认是未加密的,若你自行加密了它,需要修改代码添加密码参数:
# 读取密钥时传入密码(注意是字节类型) signing_key = jwt.jwk_from_pem(pem_file.read(), password=b"你的密钥密码")
或者更简单的方式:去GitHub App设置页面重新下载一个未加密的私钥。
4. 升级依赖库版本
旧版本的cryptography(PyJWT依赖的加密底层库)可能不支持某些密钥格式,建议升级到最新稳定版:
pip3 install --upgrade pyjwt cryptography
5. 验证文件路径是否正确
确保你输入的PEM文件路径是有效的:
- 如果用相对路径,要确认是相对于脚本运行的目录,而非你的用户根目录
- 可以先把PEM文件和脚本放在同一个文件夹里,直接输入文件名测试,排除路径错误的可能
备注:内容来源于stack exchange,提问作者Strong Like Bull
相关产品推荐
相关产品推荐

