Laravel Passport无法从.env加载密钥 报密钥路径不存在或不可读
Laravel Passport 配置.env密钥解决文件不存在报错
报错原因
Passport默认加载逻辑会优先查找storage目录下的oauth-private.key、oauth-public.key物理文件,仅在.env添加密钥内容但未修改默认加载配置时,就会触发如下报错:
local.ERROR: LogicException: Key path "file:///application/storage/oauth-private.key" does not exist or is not readable in /application/vendor/league/oauth2-server/src/CryptKey.php:53
正确配置步骤
- 确认.env内密钥格式正确
密钥要保留原始的首尾标记和换行,不要额外转义字符、不要删除原有换行,配置示例:PASSPORT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA1xZ7yJ7fZ6qXl3W9eR8tY7uI6oP5aS4dF3gH2jK1lM0nN9pO # 此处替换为你自己的完整私钥内容,保持原有换行格式 xW9eR8tY7uI6oP5aS4dF3gH2jK1lM0nN9pO8iU7yT6rE5wQ4eR3tY2uI1oP0aS== -----END RSA PRIVATE KEY-----" PASSPORT_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1xZ7yJ7fZ6qXl3W9eR8t # 此处替换为你自己的完整公钥内容,保持原有换行格式 8tY7uI6oP5aS4dF3gH2jK1lM0nN9pO8iU7yT6rE5wQ4eR3tY2uI1oP0aSdFgH== -----END PUBLIC KEY-----" - 修改Passport配置文件
打开项目下config/passport.php,找到private_key、public_key两个配置项,替换为直接读取env密钥内容的逻辑,不要拼接文件路径:
注意:如果这两个配置原来写了'private_key' => env('PASSPORT_PRIVATE_KEY'), 'public_key' => env('PASSPORT_PUBLIC_KEY'),storage_path('oauth-private.key')这类路径代码,必须删掉,否则还是会走文件查找逻辑。 - 清除缓存生效
在项目根目录执行artisan命令清除配置和应用缓存:php artisan config:clear php artisan cache:clear - 部署环境权限校验(Linux服务器必做)
给项目目录和storage目录配置正确的所属用户和权限,避免权限导致的读取异常:# 将/application替换为你自己的项目根目录路径 chown -R www-data:www-data /application chmod -R 755 /application/storage
配置完成后,Passport检测到传入的是完整密钥字符串而非文件路径,会直接加载字符串内容生成token,不会再去storage目录查找物理密钥文件,报错即可解决。
内容的提问来源于stack exchange,提问作者amit
相关产品推荐
相关产品推荐

