oauth-private.key不存在或在laravel中不可读

qvk1mo1f  于 2023-02-25  发布在  其他
关注(0)|答案(3)|浏览(189)

我克隆了一个使用passport库的Laravel Framework 6.13.1编写的gitlab项目。像往常一样,我首先执行了composer install,但我得到了这个错误:

LogicException  : Key path "file://C:\xampp\htdocs\myproject\storage\oauth-private.key" does not exist or is not readable

  at C:\xampp\htdocs\myproject\vendor\league\oauth2-server\src\CryptKey.php:48
    44|             $keyPath = 'file://' . $keyPath;
    45|         }
    46|
    47|         if (!file_exists($keyPath) || !is_readable($keyPath)) {
  > 48|             throw new LogicException(sprintf('Key path "%s" does not exist or is not readable', $keyPath));
    49|         }
    50|
    51|         if ($keyPermissionsCheck === true) {
    52|             // Verify the permissions of the key

  Exception trace:

  1   League\OAuth2\Server\CryptKey::__construct("file://C:\xampp\htdocs\myproject\storage\oauth-private.key")
      C:\xampp\htdocs\note-server\vendor\laravel\passport\src\PassportServiceProvider.php:248

  2   Laravel\Passport\PassportServiceProvider::makeCryptKey("private")
      C:\xampp\htdocs\note-server\vendor\laravel\passport\src\PassportServiceProvider.php:214

现在我不能运行php工匠命令我得到了相同的错误

哪里是问题?为什么我得到这个错误?我搜索它在互联网上有人说运行php工匠护照:安装或其他命令,但我现在不能运行php artiasan因为得到了同样的错误

z18hc3ub

z18hc3ub1#

由于**/storage/*.key位于.gitignore**中,因此如果提取项目,则可能会由于运行

php artisan passport:keys

将为您生成新密钥。

7y4bm7vi

7y4bm7vi2#

这是一个技巧,我只是用它来让我的测试环境工作,所以我不建议在生产环境中这样做,但我在运行composer install之前通过执行以下操作成功地让它工作:
我首先手动生成密钥:

ssh-keygen -t rsa -b 4096 -f ./storage/id_rsa && mv ./storage/id_rsa ./storage/oauth-private.key && mv ./storage/id_rsa.pub ./storage/oauth-public.key

然后,通过在另一台机器上运行php artisan key:generate并将其包含在存储库中,确保.env文件中存在有效的APP_KEY;你也可以手动地将它添加到.env文件中,这样做不安全的主要原因是因为这个密钥不应该包含在任何存储库中,并且出于安全考虑应该只存在于它自己的机器上。
这将使构建处于一种状态,在这种状态下,您可以运行composer install,然后运行以下命令来安装passport:

php artisan migrate
php artisan passport:install --force

希望一切都能正常工作。
同样,这是我用来让我的测试环境工作的一个黑客,因为我认为我的Laravel/Passport版本和机器本身存在某种兼容性问题。

wfveoks0

wfveoks03#

找到了另一个解决护照问题的方法。

'api' => [
        'driver' => file_exists('file://'.Passport::keyPath('oauth-public.key')) ? 'passport' : 'session',
        'provider' => 'users',
    ],

相关问题