Ila*_*ler 17 php permissions oauth laravel-5 laravel-passport
更新了以下软件包后,出现了无法找到oauth-public.key文件的错误.
包装操作:1次安装,2次更新,0次删除
更新laravel/framework(v5.4.27 => v5.4.28):正在下载(100%)
安装defuse/php-encryption(v2.1.0):正在下载(100%)
正在更新league/oauth2-server(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):操作失败:操作不被允许','/ 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)在CryptKey.php(第51行)
在ResourceServer.php中的CryptKey-> __construct('file:///var/dev/project/storage/oauth-public.key')(第50行)
文件权限
-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
Run Code Online (Sandbox Code Playgroud)
更新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
删除供应商文件夹并再次执行composer安装后,我仍然遇到同样的错误.
小智 24
尝试:
sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.key
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题.
Abd*_*aid 12
根据最新oauth-server 5.1.4 更新,您应该设置尚未实现的加密密钥passport 2.x.
对此的简单快速解决方法是通过使用以下passport 3.x内容oauth-server 6.x更新composer.json文件来使用哪些用途:
"laravel/passport": "^3.0"
Run Code Online (Sandbox Code Playgroud)
然后
composer update
Run Code Online (Sandbox Code Playgroud)
最后!我找到了解决方案。(CentO)
chown apache:apache oauth-public.key
chown apache:apache oauth-private.key
Run Code Online (Sandbox Code Playgroud)
首先,您需要找到服务器的用户名:这将返回您需要的用户名
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Run Code Online (Sandbox Code Playgroud)
对我来说是阿帕奇
小智 5
将 oauth-private.key 的所有者更改为 www-data:www-data 是不安全的。只有 oauth-public.key 应该属于 www-data:www-data。
这应该足够了:
sudo chown www-data:www-data oauth-public.key
sudo chmod 600 oauth-public.key
Run Code Online (Sandbox Code Playgroud)
完成后,通过在存储文件夹中运行以下命令来检查您的权限:
ls -la
Run Code Online (Sandbox Code Playgroud)
oauth-private.key 的所有者不应该是 www-data:www-data。
oauth-public.key 的所有者应该是 www-data:www-data
| 归档时间: |
|
| 查看次数: |
8050 次 |
| 最近记录: |