Ответ 1
Try:
sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.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
После того как я удалил папку поставщика и выполнил установку компоновщика снова, я получаю ту же ошибку.
Try:
sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.key
Он решает мою проблему.
В соответствии с последним обновлением oauth-server 5.1.4
, вы должны установить ключ шифрования, который еще не реализован в passport 2.x
.
Легко и быстро исправить это с помощью passport 3.x
, который использует oauth-server 6.x
, обновив ваш файл composer.json
с помощью
"laravel/passport": "^3.0"
Тогда
composer update
Наконец-то! Я нашел решение. (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
Неверно будет изменить владельца 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-datap >
установка композитора для меня:)
Такая же проблема здесь, я временно вернулся к более ранней версии моего файла composer.lock. Похоже, пакет OAuth пытается изменить разрешения ключей в папке хранилища, а мой сервер не имеет этого.
Я собираюсь взглянуть на журнал изменений пакетов и посмотреть, что изменилось и, возможно, повторно запустить обновления через часы.
Это зависит от вашей версии 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