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

Docker搭建Laravel8本地环境时Passport无法创建密钥文件报错

Laravel 8 Docker环境Passport密钥校验死锁修复方案

问题根因

laravel/passport将密钥文件存在性校验逻辑放在服务提供者启动阶段,框架启动加载Passport服务时就会触发校验,该动作优先级高于所有artisan命令执行逻辑——哪怕执行的是php artisan passport:keys密钥生成命令本身,也会先被校验拦截,形成无密钥就无法生成密钥的死循环。

修复方案

方案1:占位文件绕过(无侵入、效率最高)

Passport启动阶段的校验仅判断目标文件是否存在、是否具备可读权限,不会校验文件内容合法性,可先创建空文件占位,再正常执行生成命令:

  1. 进入Docker容器内的项目根目录(对应报错路径/var/www/html)
  2. 执行以下命令创建空文件并配置正确权限:
touch storage/oauth-private.key storage/oauth-public.key
chown www-data:www-data storage/oauth-*.key
chmod 600 storage/oauth-*.key
  1. 直接执行php artisan passport:keys即可正常运行,命令会自动覆盖空占位文件,写入合法密钥内容。

方案2:原生OpenSSL生成密钥(完全绕开artisan校验)

passport:keys底层就是调用OpenSSL生成RSA密钥对,可直接执行系统命令生成密钥,不需要走artisan流程:

cd /var/www/html/storage
# 生成4096位RSA私钥
openssl genrsa -out oauth-private.key 4096
# 从私钥导出对应公钥
openssl rsa -in oauth-private.key -pubout -out oauth-public.key
# 配置文件权限
chown www-data:www-data oauth-*.key
chmod 600 oauth-*.key

该方式生成的密钥与artisan命令生成的密钥完全等效,不影响Passport任何功能运行。

后续配置

全新本地环境生成密钥后,需执行php artisan passport:client --personal创建个人访问客户端,否则个人令牌授权相关接口会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:57:19