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

Symfony 5项目部署Heroku后报错:无法基于给定配置生成签名JWT

根因说明

该错误是Heroku环境无法读取JWT加密所需的公私钥文件导致,本地运行正常是因为你的本地环境存在config/jwt/private.pem和config/jwt/public.pem两个密钥文件,而这两个文件通常会被默认加入.gitignore规则,不会随代码提交到Heroku,因此Heroku环境缺少生成JWT所需的核心配置。

推荐解决方案(安全无敏感文件泄露风险)

无需将密钥文件提交到代码仓库,直接把密钥内容写入Heroku环境变量即可:

  • 第一步:本地执行命令将密钥转为单行格式,避免换行符识别异常
    输出私钥单行内容:awk -v ORS='\\n' '1' config/jwt/private.pem
    输出公钥单行内容:awk -v ORS='\\n' '1' config/jwt/public.pem
  • 第二步:更新Heroku环境变量配置,替换原来的路径类配置
    heroku config:set JWT_SECRET_KEY="刚才输出的私钥单行内容"
    heroku config:set JWT_PUBLIC_KEY="刚才输出的公钥单行内容"
    heroku config:set JWT_PASSPHRASE=pass
    
  • 第三步:修改Symfony的JWT配置文件config/packages/lexik_jwt_authentication.yaml,适配直接读取环境变量中的密钥内容:
    lexik_jwt_authentication:
        secret_key: '%env(resolve:JWT_SECRET_KEY)%'
        public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
        pass_phrase: '%env(JWT_PASSPHRASE)%'
    
  • 第四步:提交修改后的配置文件,推送到Heroku并重启应用即可生效。
可选解决方案(不推荐,存在敏感文件泄露风险)

如果你一定要保留路径形式的配置,可按如下操作:

  • 检查项目.gitignore文件,删除或注释忽略config/jwt/*.pem的规则
  • 执行git add config/jwt/*.pem -f强制提交密钥文件到代码仓库,推送到Heroku
  • 执行heroku run chmod 644 config/jwt/*.pem调整密钥文件权限,避免Heroku进程无权限读取文件
验证方式

部署完成后执行heroku run php bin/console lexik:jwt:generate-token test,如果正常输出token字符串则说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:04