Laravel chmod(/var/dev/project/storage/oauth-public.key): 操作失败: 不允许操作
更新以下软件包后,我收到一个错误,即找不到oauth-public.key文件。
包操作:1 次安装、2 次更新、0 次删除
更新 laravel/framework (v5.4.27 => v5.4.28): 正在下载 (100%)
安装 defuse/php 加密 (v2.1.0): 正在下载 (100%)
更新 league/oauth2 服务器 (5.1.3 => 5.1.4): 正在下载 (100%)
首先,我删除了项目/存储中的两个oauth文件,然后执行以下命令:php artisan passport:install以生成新的oauth-文件。
现在,我在尝试访问 api 路由时收到以下错误。
(1/1) ErrorException chmod(/var/dev/project/storage/oauth-public.key): 操作失败: 不允许操作
堆栈跟踪
在CryptKey.php(第51行)
at HandleExceptions->handleError(2, 'chmod(/var/dev/project/storage/oauth-public.key): Operation failed: Operation not allowed', '/var/dev/project/vendor/league/oauth2-server/src/CryptKey.php', 51, array('keyPath' => 'file:///var/dev/project/storage/oauth-public.key', 'passPhrase' => null, 'keyPathPerms' => '644'))
at chmod('file:///var/dev/project/storage/oauth-public.key', 384) in CryptKey.php (第51行)
at CryptKey->__construct('file:///var/dev/project/storage/oauth-public.key') in ResourceServer.php (第 50 行)
文件权限
-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
更新 1
我发现oauth Libaray引入了一个安全修复程序。Oauth V5 安全改进
版本 5.1.4 是与其他 5.1.x 版本的向后兼容。
您会注意到在服务器日志中出现如下消息:
您必须设置加密密钥以提高此库的安全性 - 有关详细信息,请参阅此页面 https://oauth2.thephpleague.com/v5-security-improvements/
要在实例化 \League\OAuth2\Server\AuthorizationServer 的实例后阻止此通知,您应该调用 setEncryptionKey() 方法传入至少 32 个字节的随机数据。
您可以使用base64_encode(random_bytes(32)生成此函数。或者,如果您使用的是像Laravel这样的框架,它已经生成了一个加密密钥,则可以将其传递(在Laravel的情况下,请使用env('APP_KEY'))。
问题是Laravel Passport的维护者必须解决这个问题。
更新 2
在我删除了供应商文件夹并再次执行作曲家安装后,我仍然得到相同的错误。