You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyJWT调用get_signing_key_from_jwt报PyJWKError的解决方法

问题根因

报错是因为你认证服务返回的JWK公钥条目缺失alg字段。PyJWT 2.4.0的PyJWKClient默认只会读取JWK条目自带的alg属性判断签名算法,不会主动从你传入的access_token的JWT头部提取alg值做匹配——就算返回的是合法的RS256 RSA公钥,只要条目里没写alg字段,就会直接抛出你看到的异常。

修复方案

任选一种方案即可解决问题:

  • 客户端代码适配(无需修改服务端)
    初始化PyJWKClient时显式传入实际使用的签名算法列表,当JWK条目缺失alg字段时,客户端会用传入的算法列表做匹配校验,不会直接抛错。修改后的代码如下:
    import jwt
    jwks_uri="https://my_auth_server/keys.json"
    jwks_client = jwt.PyJWKClient(jwks_uri, algorithms=["RS256"])
    signing_key = jwks_client.get_signing_key_from_jwt(my_access_token)
    
  • 服务端配置修正(符合JWK标准规范)
    如果你有权限修改认证服务的JWKs接口配置,直接给返回的每个公钥条目补充"alg": "RS256"字段即可。这种写法符合RFC 7517的JWK官方规范,能兼容所有版本的JWT解析客户端,不需要调整现有业务代码。
避坑提示

传入algorithms参数时不要使用过于宽泛的取值,不要启用none这类危险算法,也不要把业务未使用的算法加入列表,避免遭遇签名算法替换类的安全漏洞,仅填入实际使用的RS256即可。

内容的提问来源于stack exchange,提问作者Mercury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:48:10