php - the - Laravel chmod(/var/dev/project/storage/oauth-public.key): operación fallida: operación no permitida
refresh token laravel passport (7)
Después de actualizar los siguientes paquetes, recibí un error que indica que no se pudo encontrar el archivo oauth-public.key .
Operaciones de paquete: 1 instalación, 2 actualizaciones, 0 eliminaciones
Actualizando laravel / framework (v5.4.27 => v5.4.28): Descargando (100%)
Instalando defuse / php-encryption (v2.1.0): Descargando (100%)
Actualización de league / oauth2-server (5.1.3 => 5.1.4): Descargando (100%)
En primer lugar, eliminé los dos archivos oauth en el proyecto / almacenamiento y luego ejecuté este comando: php artisan passport: instale para generar nuevos archivos oauth .
Ahora obtengo el siguiente error al intentar acceder a una ruta de api .
(1/1) ErrorException chmod (/var/dev/project/storage/oauth-public.key): operación fallida: operación no permitida
Rastro de pila
en CryptKey.php (línea 51)
en HandleExceptions-> handleError (2, ''chmod (/var/dev/project/storage/oauth-public.key): operación fallida: operación no permitida'', ''/ 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''))
en chmod (''file: ///var/dev/project/storage/oauth-public.key'', 384) en CryptKey.php (línea 51)
en CryptKey-> __construct (''file: ///var/dev/project/storage/oauth-public.key'') en ResourceServer.php (línea 50)
Permisos de archivos
-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
Actualización 1
Me enteré de que oauth Libaray introdujo una solución de seguridad. Mejoras de seguridad de Oauth V5
La versión 5.1.4 es una compatibilidad hacia atrás con otras versiones 5.1.x.
Notarás en tu servidor un mensaje como este:
Debe configurar la clave de cifrado para mejorar la seguridad de esta biblioteca; consulte esta página para obtener más información https://oauth2.thephpleague.com/v5-security-improvements/
Para suprimir este aviso, una vez que haya creado una instancia de / League / OAuth2 / Server / AuthorizationServer, debe llamar al método setEncryptionKey () pasando por lo menos 32 bytes de datos aleatorios.
Puede generar esto usando base64_encode (random_bytes (32)). Alternativamente, si está utilizando un marco como Laravel que ya tiene una clave de cifrado generada, puede pasarla (en el caso de Laravel, use env (''APP_KEY'')).
El problema es que el mantenedor de Laravel Passport tiene que arreglar esto.
Actualización 2
Después de que quité la carpeta del proveedor y ejecuté la instalación del compositor nuevamente, recibo el mismo error.
¡Finalmente! Encontré la solución. (CentOs)
chown apache:apache oauth-public.key
chown apache:apache oauth-private.key
Al principio, debe encontrar el nombre de usuario de su servidor: Esto devolverá el nombre de usuario que necesita
ps aux | grep -E ''[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx'' | grep -v root | head -1 | cut -d/ -f1
Para mi es apache
De acuerdo con la última oauth-server 5.1.4
, debe establecer una clave de cifrado que aún no esté implementada en el passport 2.x
Una solución fácil y rápida para esto es mediante el uso de passport 3.x
que utiliza oauth-server 6.x
actualizando su archivo composer.json
con:
"laravel/passport": "^3.0"
Entonces
composer update
Depende de tu versión de Laravel y Passport también. si usa el último Laravel 5.4, utiliza Passport 3.0, que tiene el parche para el paquete Oauth.
Si está usando larvel 5.3, usa Passport 1.0 (¡debería actualizar!) [Sin parche] pero esto usa la versión estable de league / OAuth-server que está en el momento (5.1.4) que tiene el file verificación.
La solución para esto: debe forzar la instalación de la versión 5.1.3 (no ideal) pero solucionaría el problema. Ejecutar en la raíz del proyecto. composer require league/oauth2-server 5.1.3
El compositor instala obras para mi :)
El mismo problema aquí, he revertido temporalmente a una versión anterior de mi archivo composer.lock. Parece que el paquete OAuth está intentando modificar los permisos de las claves dentro de la carpeta de almacenamiento y mi servidor no lo tiene.
Voy a echar un vistazo al registro de cambios de los paquetes y ver qué ha cambiado y quizás volver a ejecutar las actualizaciones después de horas.
No sería seguro cambiar el propietario de oauth-private.key a www-data: www-data. Solo el oauth-public.key debe ser propiedad de www-data: www-data.
Esto debería ser suficiente:
sudo chown www-data:www-data oauth-public.key
sudo chmod 600 oauth-public.key
Una vez hecho esto, verifique sus permisos ejecutando esto en la carpeta de almacenamiento:
ls -la
El propietario de oauth-private.key NO debe ser www-data: www-data.
El propietario de oauth-public.key debe ser www-data: www-data
Tratar:
sudo chown www-data:www-data storage/oauth-*.key
sudo chmod 600 storage/oauth-*.key
Resuelve mi problema.