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

使用JWK生成RS256带KID的JWT时报错:期望PEM格式密钥

错误根因

你使用的PyJWT库的RS256签名算法,只接受PEM格式的密钥字符串、或者cryptography库生成/解析后的RSA私钥对象作为密钥入参。你当前直接传入了JWK格式的Python字典,不符合参数要求,所以抛出格式错误。

修复步骤
  1. 先安装处理JWK格式的依赖库:
pip install jwcrypto pyjwt cryptography
  1. 修改代码,将JWK格式私钥转为PEM格式后再调用签名逻辑,完整可运行代码如下:
import jwt
from jwcrypto import jwk

body = {
  "sub": "createjwt",
  "iss": "sktestissuer",
  "exp": 9283750542
}
# 这里是你的JWK格式私钥,注意替换为真实的参数值,示例值无法正常签名
private_key_jwk = {
  "p": "atewtwetwqetasdfaerawerqwerqwur",
  "kty": "RSA",
  "q": "atewtwetwqetasdfaerawerqwerqwF",
  "d": "atewtwetwqetasdfaerawerqwerqw",
  "e": "ABCD",
  "use": "sig",
  "kid": "test_key",
  "qi": "atewtwetwqetasdfaerawerqwerqw",
  "dp": "atewtwetwqetasdfaerawerqwerqw",
  "dq": "atewtwetwqetasdfaerawerqwerqw",
  "n": "atewtwetwqetasdfaerawerqwerqw"
}

# JWK转PEM格式
jwk_obj = jwk.JWK(**private_key_jwk)
private_key_pem = jwk_obj.export_to_pem(private_key=True, password=None)

# 生成带KID的JWT
encoded = jwt.encode(
    body, 
    private_key_pem,
    headers={"kid": "test_key"}, 
    algorithm="RS256"
)
print(encoded)
补充说明
  • 如果你本身持有PEM格式的私钥文件,不需要走JWK转PEM的逻辑,直接读取PEM文件内容传入jwt.encode即可。
  • 你示例代码里的JWK参数都是测试占位值,实际运行时需要替换为合法的RSA密钥参数,否则会抛出参数非法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:27:04