次のパッケージを更新した後、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%)
まず、プロジェクト/ストレージ内の2つのoauth-ファイルを削除してから、次のコマンドを実行しました:php artisan passport:install 新しい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')))
cryptKey.phpのchmod( 'file:///var/dev/project/storage/oauth-public.key'、384)(行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
アップデート1
oauth Libarayはセキュリティ修正を導入しました。 Oauth V5セキュリティの改善
バージョン5.1.4は、他の5.1.xリリースとの下位互換性があります。
サーバーのログには次のようなメッセージが記録されます。
このライブラリのセキュリティを向上させるには、今後暗号化キーを設定する必要があります-詳細については、このページを参照してください https://oauth2.thephpleague.com/v5-security-improvements/
\ League\OAuth2\Server\AuthorizationServerのインスタンスをインスタンス化した後にこの通知を抑制するには、少なくとも32バイトのランダムデータを渡してsetEncryptionKey()メソッドを呼び出す必要があります。
これはbase64_encode(random_bytes(32))を使用して生成できます。または、Laravelなどのフレームワークを使用しており、暗号化キーが既に生成されている場合は、その中に渡すことができます(Laravel use env( 'APP_KEY'))。
問題は、Laravel Passportのメンテナーがこれを修正する必要があることです。
更新2
ベンダーフォルダーを削除してcomposer installを再度実行しても、同じエラーが表示されます。
試してください:
Sudo chown www-data:www-data storage/oauth-*.key
Sudo chmod 600 storage/oauth-*.key
それは私の問題を解決します。
最新のoauth-server 5.1.4
pdate によれば、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に変更するのは安全ではありません。 www-data:www-dataが所有するのはoauth-public.keyのみです。
これで十分です:
Sudo chown www-data:www-data oauth-public.key
Sudo chmod 600 oauth-public.key
完了したら、ストレージフォルダーでこれを実行してアクセス許可を確認します。
ls -la
Oauth-private.keyの所有者はwww-data:www-dataであってはなりません。
oauth-public.keyの所有者はwww-data:www-dataである必要があります
LaravelとPassportのバージョンにも依存します。最新のLaravel 5.4を使用している場合、Oauthパッケージ用のパッチを含むPassport 3.0を使用します。
Larvel 5.3を使用している場合、Passport 1.0を使用します(アップグレードする必要があります!!)[パッチなし]が、これはチェックのある当時のリーグ/ OAuth-serverの安定バージョン(5.1.4)を使用します ファイル 。
これに対する解決策:5.1.3バージョンを強制的にインストールする必要があります(理想的ではありません)が、問題は修正されます。プロジェクトルートで実行します。 composer require league/oauth2-server 5.1.3
ここでも同じ問題があります。composer.lockファイルの以前のバージョンに一時的にロールバックしました。 OAuthパッケージがストレージフォルダー内のキーのアクセス許可を変更しようとしていますが、サーバーにそれがありません。
パッケージの変更ログを見て、何が変更されたかを確認し、数時間後に更新を再実行します。
作曲家のインストールは私のために働く:)