You need to enable JavaScript to run this app. Django Rest Framework Simple JWT使用RS512算法时提示密钥反序列化错误
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework Simple JWT使用RS512算法时提示密钥反序列化错误

RS512 密钥反序列化报错修复指南

报错核心原因

Could not deserialize key data. The data may be in an incorrect format or it may be encrypted with an unsupported algorithm.

这个报错触发的根本原因是Simple JWT底层依赖的cryptography库无法识别你传入的密钥格式,对照你贴的配置来看,存在三个明确的格式错误:

  • 传入的SIGNING_KEY根本不是私钥:你当前填写的是带ssh-rsa前缀的OpenSSH登录用公钥字符串,完全混淆了SSH认证密钥和JWT签名需要的RSA私钥,库自然无法解析。
  • 密钥内容缺失PEM格式的固定头尾标识:不管是RSA私钥还是公钥,都必须带明确的格式头尾(比如-----BEGIN RSA PRIVATE KEY-----、-----BEGIN PUBLIC KEY-----),你现在直接填裸base64字符串,库无法识别密钥类型。
  • 密钥长度和算法要求不匹配:你配置的算法是RS512,但当前使用的密钥仅为1024位长度,远低于RS512要求的最低2048位RSA密钥长度,就算格式修正后也会触发安全校验问题。

可直接落地的修复步骤

  • 重新生成符合JWT RS512要求的RSA密钥对,不要使用OpenSSH生成的登录用ssh-rsa格式密钥,直接通过OpenSSL命令生成标准PEM格式密钥:
    • 生成4096位长度的RSA私钥(满足RS512的安全要求):
      openssl genrsa -out jwt_private.pem 4096
    • 从私钥文件导出对应的公钥:
      openssl rsa -in jwt_private.pem -pubout -out jwt_public.pem
  • 替换原有配置中的错误密钥值,必须完整保留PEM格式的头尾标识,使用Python三引号包裹带换行的PEM内容,不要把换行全部去掉拼成一长串字符串:
    正确配置示例:
    SIMPLE_JWT = {
        'ALGORITHM': 'RS512',
        # 完整粘贴私钥文件全部内容,保留BEGIN/END头尾
        'SIGNING_KEY': """-----BEGIN RSA PRIVATE KEY-----
    这里替换成jwt_private.pem文件内的全部文本内容
    -----END RSA PRIVATE KEY-----
    """,
        # 完整粘贴公钥文件全部内容,保留BEGIN/END头尾
        'VERIFYING_KEY': """-----BEGIN PUBLIC KEY-----
    这里替换成jwt_public.pem文件内的全部文本内容
    -----END PUBLIC KEY-----
    """
    }
    
  • 校验容易踩的坑点:
    • 不要在密钥内容前加多余的标识(比如你之前配置里的ssh-rsa前缀,必须完全删除)
    • 不要搞反公私钥的对应关系:SIGNING_KEY必须填写私钥内容,VERIFYING_KEY必须填写对应公钥内容,搞反后依旧会触发反序列化报错
    • 如果生成的私钥带加密保护(需要输入密码才能读取),需要额外在SIMPLE_JWT配置中增加SIGNING_KEY_PASSWORD字段填写对应密码,否则库无法解密私钥
    • 替换配置后先调用POST /api/jwt/create/接口验证能否正常返回token,再测试带token访问受保护接口的流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 09:24:06