Laravel Passport密钥路径oauth-public.key不存在或不可读。

74

在尝试访问资源时,Laravel Passport 显示了这个问题

Key path "file://C:\xampp\htdocs\rental_5.0\storage\oauth-public.key" does not exist or is not readable

好的,权限是什么?另外,你的 openssl 可执行文件的位置在哪里? - Ohgodwhy
13个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
125

你没有提到你的安装步骤。假设你已经完成了以下步骤:

composer require laravel/passport

config/app.php中注册服务提供者。

Laravel\Passport\PassportServiceProvider::class,

运行迁移

php artisan migrate

最后使用以下方法生成密钥

php artisan passport:install

我看到您正在Windows上尝试。 我在Windows上看到了一个OpenSSL问题,这可能会对您有所帮助。


在Windows上遇到OpenSSL问题,GnuWin似乎是我的问题所在。 - Sabri Aziri
任何在生产 Laravel Forge 中遇到此问题的人,您只需通过 SSH 进入 Forge "ssh forge@ip_address_here",然后运行 "php artisan passport:install --force"(强制覆盖密钥)即可。这将生成密钥并将其放置在指定位置。 - Manas

56

这是因为您没有使用passport密钥生成Oauth密钥。

运行

php artisan passport:keys

然后运行以下命令生成个人访问客户端

php artisan passport:client --personal

输入它要求你的细节,然后你就完成了。


7

可能 storage/oauth-private.keystorage/oauth-public.key 不存在,而您导入了旧的数据库。对于这种情况,请运行以下命令。

php artisan passport:keys
如果您已导入了旧数据库且其中已经存在与passport相关的数据,请尝试此解决方案。否则,请按照被采纳的答案进行操作。

5

我在Ubuntu中也遇到了同样的错误,问题出在权限上,运行以下命令可以解决这个问题:

sudo chown www-data:www-data storage/oauth-*.key

该命令将更改所选文件的所有者为“www-data”用户,将组设置为“www-data”,从而修复了访问权限问题。


5
我们之所以会出现这个错误,是因为passport没有正确安装。 解决方法很简单,只需运行以下命令:
php artisan passport:install

4
直接进入 Laravel 项目根目录下的 .gitignore 文件,删除 /storage/*.key 行。可能是因为你的服务器不允许在该目录中写入 keys 文件。重新上传或发布您的仓库。

3

我的Windows机器没有安装OpenSSL

  1. 下载 GnuWi
  2. bin/openssl.exe 解压到一个环境变量路径目录中(您可以在您的用户文件夹中创建自己的 bin 文件夹并将该路径添加到 Path 变量中)
  3. 打开新的命令提示符(现有的可能没有最新的环境变量)
  4. 运行 php artisan passport:install

https://github.com/laravel/passport/issues/48#issuecomment-241936338

编辑

在Windows系统中,使用git BASH,您无需安装任何其他软件,只需从BASH中运行php artisan passport:install即可。


1
我从项目文件夹中打开了Git Bash。然后在Git Bash中运行了"php artisan passport:install"命令,接着又运行了"php artisan serve"命令。最后,我使用Postman发送了一个请求,它成功地工作了。感谢这个版本的改进。 - Rajib

2
我使用Heroku。据我所知,Heroku默认添加OpenSSL支持(https://devcenter.heroku.com/articles/php-support)。 所有的事情,比如php artisan install:passport都可以无问题运行,我的项目也可以在网络上访问。 当我要求php artisan route:list时,我收到了这个异常:
[LogicException]
  Key path "file:///app/storage/oauth-private.key" does not exist or is not readable

这对我来说与上面的内容相同。

我也成功地完成了所有本地操作。在这些步骤之后,git显示我的密钥已经存储在我的存储文件夹中,所以我提交并将它们推送到Heroku。

这解决了问题,现在在Heroku上一切都正常。

(在这里和那里使用相同的密钥是否可以?)


1
如果您使用的是Windows系统,应该安装openSSL(请参阅下面的帖子)。我不确定是否可以,但出于安全考虑,请在生产环境中添加另一个密钥。 - Sabri Aziri
我认为你的回答值得点赞。出于某种原因,可能是为了安全考虑,在.gitignore中被忽略了,而Heroku会抛出500错误。所以在我的情况下,我只需要从.gitignore中删除它并推送,就可以正常工作了。我还尝试使用命令行在Heroku上运行php artisan passport:install或passport:keys,但没有成功。 - Jerry Okafor
1
通常在版本控制中存储私钥是一种不好的做法。 - jsphpl
10
我找到了一个解决方案,使用Heroku CLI运行heroku ps:exec命令,然后运行php artisan passport:keys命令。 - David L

0

本地系统一切正常,但在生产系统上遇到了同样的问题。在我的情况下,Git 由于合理的原因忽略了密钥。 在生产服务器上执行 php artisan passport:keys 后一切运行良好。


0
在我的情况下,它就是不起作用 - 我尝试了一切 - 可能是文件访问的问题(但是ls -la看起来很好) - 所以我在另一台机器上生成了那些密钥并将其复制到服务器上 - 然后php artisan passport:install开始工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,