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-encryption (v2.1.0): Загрузка (100%)
  Обновление лиги/oauth2-сервера (5.1.3 = > 5.1.4): Загрузка (100%)

Во-первых, я удалил два файла oauth - в проекте/хранилище, а затем выполнил эту команду: паспорт php artisan: установите, чтобы создать новый oauth - файлы.

Теперь я получаю следующую ошибку при попытке доступа к маршруту api.

(1/1) ErrorException chmod (/var/dev/project/storage/oauth-public.key): операция не выполнена: операция не разрешена

Трассировка стека

в CryptKey.php(строка 51)

в 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 '))

в chmod ('файл:///var/dev/project/storage/oauth-public.key', 384) в CryptKey.php(строка 51)

в CryptKey- > __construct ('файл:///var/dev/project/storage/oauth-public.key') в 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

После того как я удалил папку поставщика и выполнил установку компоновщика снова, я получаю ту же ошибку.

Ответы

Ответ 1

Try:

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

Он решает мою проблему.

Ответ 3

Наконец-то! Я нашел решение. (CentOs)

chown apache:apache oauth-public.key
chown apache:apache oauth-private.key

Сначала вам нужно найти имя пользователя своего сервера: Это вернет вам имя пользователя

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

Для меня это apache

Ответ 4

Неверно будет изменить владельца 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

После этого проверьте свои разрешения, запустив это в папке хранилища:

ls -la

Владелец oauth-private.key НЕ должен быть www-данными: www-data.
Владелец oauth-public.key должен быть www-data: www-data​​p >

Ответ 5

установка композитора для меня:)

Ответ 6

Такая же проблема здесь, я временно вернулся к более ранней версии моего файла composer.lock. Похоже, пакет OAuth пытается изменить разрешения ключей в папке хранилища, а мой сервер не имеет этого.

Я собираюсь взглянуть на журнал изменений пакетов и посмотреть, что изменилось и, возможно, повторно запустить обновления через часы.

Ответ 7

Это зависит от вашей версии Laravel и Passport. если использовать последний Laravel 5.4, он использует Passport 3.0, у которого есть патч для пакета Oauth.

Если вы используете larvel 5.3, он использует Passport 1.0 (вы должны обновить!!) [no patch], но для этого используется стабильная версия лига/OAuth-сервера, которая в то время (5.1.4), которая имеет чек файл.

Решение для этого: вам нужно принудительно установить версию 5.1.3 (не идеально), но устранить проблему. запустить в корне проекта. composer require league/oauth2-server 5.1.3