Après avoir mis à jour les paquetages suivants, j'ai reçu une erreur indiquant que le fichier oauth-public.key était introuvable.
Opérations sur les paquets: 1 installation, 2 mises à jour, 0 suppressions
Mise à jour de laravel/framework (v5.4.27 => v5.4.28): Téléchargement (100%)
Installation de defuse/php-encryption (v2.1.0): Téléchargement (100%)
Mise à jour de la ligue/oauth2-server (5.1.3 => 5.1.4): Téléchargement (100%)
Premièrement, j'ai supprimé les deux fichiers oauth- du projet/stockage, puis exécuté cette commande: php artisan passport: install pour générer de nouveaux fichiers oauth-.
Maintenant, l'erreur suivante s'affiche lorsque j'essaie d'accéder à une route api.
(1/1) ErrorException chmod (/var/dev/project/storage/oauth-public.key): l'opération a échoué: l'opération n'est pas autorisée
Trace de la pile
dans CryptKey.php (ligne 51)
at HandleExceptions-> handleError (2, 'chmod (/var/dev/project/storage/oauth-public.key): l'opération a échoué: l'opération n'a pas été autorisée', '/ var/dev/projet/vendor/league/oauth2-server /src/CryptKey.php ', 51, array (' keyPath '=>' fichier: ///var/dev/project/storage/oauth-public.key ',' passPhrase '=> null,' keyPathPerms '=> «644»))
at chmod ('fichier: ///var/dev/project/storage/oauth-public.key', 384) dans CryptKey.php (ligne 51)
at CryptKey-> __construct ('fichier: ///var/dev/project/storage/oauth-public.key') dans ResourceServer.php (ligne 50)
Autorisations de fichiers
-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
Mise à jour 1
J'ai découvert que oauth Libaray avait introduit un correctif de sécurité. Améliorations de la sécurité pour Oauth V5
La version 5.1.4 est compatible avec d’autres versions 5.1.x.
Vous remarquerez dans votre serveur enregistre un message comme celui-ci:
Vous devez définir la clé de cryptage pour améliorer la sécurité de cette bibliothèque. Pour plus d'informations, consultez cette page. https://oauth2.thephpleague.com/v5-security-improvements/
Pour supprimer cette notification une fois que vous avez instancié une instance de\League\OAuth2\Server\AuthorizationServer, vous devez appeler la méthode setEncryptionKey () en transmettant au moins 32 octets de données aléatoires.
Vous pouvez générer cela en utilisant base64_encode (random_bytes (32)). Si vous utilisez un framework tel que Laravel qui a déjà généré une clé de cryptage, vous pouvez le transmettre (dans le cas de Laravel, utilisez env ('APP_KEY')).
Le problème est que le responsable de Laravel Passport doit résoudre ce problème.
Mise à jour 2
Après avoir supprimé le dossier du fournisseur et exécuté à nouveau composer install, la même erreur se produit.
Essayer:
Sudo chown www-data:www-data storage/oauth-*.key
Sudo chmod 600 storage/oauth-*.key
Cela résout mon problème.
Selon la dernière oauth-server 5.1.4
update , vous devez définir une clé de cryptage qui n’est pas encore implémentée dans passport 2.x
.
Une solution simple et rapide consiste à utiliser passport 3.x
, qui utilise oauth-server 6.x
en mettant à jour votre fichier composer.json
avec:
"laravel/passport": "^3.0"
Ensuite
composer update
Finalement! J'ai trouvé la solution. (Centos)
chown Apache:apache oauth-public.key
chown Apache:apache oauth-private.key
Pour commencer, vous devez trouver le nom d'utilisateur de votre serveur: Le nom d'utilisateur dont vous avez besoin
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Pour moi c'est Apache
Il ne serait pas prudent de changer le propriétaire de oauth-private.key en www-data: www-data. Seul le fichier oauth-public.key devrait appartenir à www-data: www-data.
Cela devrait suffire:
Sudo chown www-data:www-data oauth-public.key
Sudo chmod 600 oauth-public.key
Une fois cela fait, vérifiez vos autorisations en exécutant ceci dans le dossier de stockage:
ls -la
Le propriétaire de oauth-private.key NE DOIT PAS être www-data: www-data.
Le propriétaire de oauth-public.key devrait être www-data: www-data
Cela dépend aussi de vos versions de Laravel et de Passport . Si vous utilisez la dernière version de Laravel 5.4, il utilise Passport 3.0 qui contient le correctif pour le package Oauth.
Si vous utilisez larvel 5.3, il utilise Passport 1.0 (vous devez mettre à niveau !!) [pas de correctif], mais ceci utilise la version stable de league/OAuth-server qui est à la fois (5.1.4) et qui contient le fichier check .
La solution à cela: vous devez forcer l’installation de la version 5.1.3 (ce qui n’est pas idéal) mais vous voudriez résoudre le problème . Exécuté à la racine du projet .composer require league/oauth2-server 5.1.3
Même problème ici, je suis temporairement revenu à une version antérieure de mon fichier composer.lock. Il semble que le package OAuth tente de modifier les autorisations des clés du dossier de stockage et que mon serveur ne l’a pas.
Je vais jeter un coup d'œil au journal des changements de paquets, voir ce qui a changé et peut-être relancer les mises à jour après les heures normales.
compositeur installer des oeuvres pour moi :)