クライアント資格情報を使用して、APIにアクセスするクライアントアプリケーションを認証したい。
私の問題は、クライアント資格情報の作成です。 php artisan passport:client
を使用するには、クライアントをそのユーザーに関連付けるためにuser_idを入力する必要があります。わかりません。クライアントアプリケーションをユーザーに関連付ける必要があるのはなぜですか。または別の方法がありますか?
passport:clientコマンドは、パスワード付与クライアントと個人付与クライアントの作成のみをサポートします。それらのどれも私が必要としているものだとは思いません。
私が本当に必要とするのは、クライアントアプリケーションが一部のAPIへのアクセスを承認するためにのみ使用するクライアント資格情報を作成することです。どうやってするか?
私はあなたがマシンツーマシン認証を使用したいと思います(ユーザーインタラクションなし)
私はそれのこつを得るためにドキュメントを数回読むことをお勧めします。
唯一のクライアント資格情報クライアントを作成する特定の方法があるとは思いません。個人用クライアントを作成してから、データベース内の個人用クライアントのフィールドを変更することですpersonal_access_client
1
=> 0
--help
オプションからわかるように、パーソナルクライアントオプションを使用できます。
Usage:
passport:client [options]
Options:
--personal Create a personal access token client
--password Create a password grant client
--name[=NAME] The name of the client
-h, --help Display this help message
...
php artisan passport:client --personal
出力
Personal access client created successfully.
Client ID: 1
Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYy
この方法を使用する場合、ユーザーが存在しないため、デフォルト以外のミドルウェアを使用する必要があります。
クラス\App\Http\Kernel
:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'client_credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
//ommited
];
Route::get('/test', 'ApiTestController@test')->middleware('client_credentials');
クラス\App\Http\Controllers\ApiTestController
:
public function test() {
return response()->json(['data' => 'hey'] );
}
php artisan route:list
から
GET|HEAD | api/test | App\Http\Controllers\ApiTestController@test | api,client_credentials |
Client-credentials-grant-tokensのドキュメントで指定されたリクエストに従う
簡単にするためにPostmanを使用し、Postman(www.getpostman.com)で簡単にテストリクエストを送信
承認をOAuth 2.0、image: Postman authentication に設定します
アクセストークンのURL、クライアントID、クライアントシークレットを設定し、タイプを「クライアント認証情報」に設定します。画像: Postman OAuth Fields
Postmanはトークンを作成し、それをURLまたはヘッダー(この場合はヘッダー)に追加します
Accept:application/json
Authorization:Bearer eyJ0eXAiOi...KCjK0
応答:
{
"data": "hey"
}
私はコメントするつもりでしたが、まだ十分な評判がありません= p
コマンドにユーザー入力を必要としない名前パラメーターを与えることができます。手動で介入せずにクライアントの秘密をクライアントに伝える方法は、実際の魔法のようです。
php artisan passport:client --personal --name={someName}
そのコマンドはまだあなたに与えるでしょう:
Personal access client created successfully.
Client ID: 1
Client Secret: LbjQNxK5SQZ3pPrEBUwbkE8vaRkg8jh25Qh43HYy
予想通り。