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

使用PyJWT在Python中解码Firebase JWT出现PEM格式密钥错误如何解决

错误原因

  • 你从Google接口请求拿到的key_list实际是键为kid(密钥ID)、值为PEM格式公钥的字典,不是可直接传入jwt.decode的密钥参数,这是报错的核心原因
  • 你直接传入单个密钥内容时报错,大概率是没有匹配JWT Header中携带的kid对应的公钥,或是缺少PyJWT所需的加密依赖

修正方案

首先安装正确依赖:

pip install pyjwt cryptography requests

修改代码逻辑:先解析JWT未签名的头部获取对应kid,再匹配对应公钥后完成解码,示例代码如下:

import jwt
import requests

def check_token(token):
    # 获取Google公钥字典
    response = requests.get("https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com")
    public_keys = response.json()
    
    # 解析JWT头获取kid
    jwt_header = jwt.get_unverified_header(token)
    kid = jwt_header["kid"]
    
    # 取出匹配的PEM公钥
    target_public_key = public_keys[kid]
    
    # 解码验证JWT,务必补充aud、iss校验参数避免安全漏洞
    decoded_token = jwt.decode(
        token,
        key=target_public_key,
        algorithms=["RS256"],
        audience="你的Firebase项目ID",
        issuer="https://securetoken.google.com/你的Firebase项目ID"
    )
    print(f"Decoded token : {decoded_token}")

注意:必须补充aud、issuer校验参数,否则你的验证逻辑存在安全漏洞,会接受任意签名合法的JWT。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:02