Laravel Passportのクライアント認証を試してみる
Laravel Passportを使ってAPIからのアクセスにOAuth認証をかけたい。
一般に公開するものではなく、特定のクライアントからのアクセスのみを想定する。
そのため、ユーザデータは使用しない。
インストール
Laravel Passportをインストール。
1
| |
Package Auto-Discovery に対応しているため、プロバイダに追加してやる作業は必要ない。
セットアップ
DBに必要なテーブルを作成する。
1
| |
OAuth用に以下のテーブルが作成される。
oauth_access_tokensoauth_auth_codesoauth_clientsoauth_personal_access_clientsoauth_refresh_tokens
トークン作成時に使用されるキーを生成する。
1
| |
キーは、/storage/以下に生成される。
デフォルトでは.gitignoreで無視する設定となっているので注意。
また、公開リポジトリにアップしてはいけない。
対処法などは以下参考。
また、キーの生成とともに、DBにクライアントが作成される。
1 2 3 4 5 6 7 | |
一つ目が、 Laravel Personal Access Client
二つ目が、Laravel Password Grant Client
二つ目はユーザ名+パスワードを利用したアクセストークンの発行に利用出来る。
(ユーザーとの紐付けは特に必要なし)
(必要なければ消しておいてもよい)
コードに追加
AuthServiceProvider.phpに追加
/app/Providers/AuthServiceProvider.php
1 2 3 4 5 6 | |
auth.phpのdriverをpassportに変更
/config/auth.php
1 2 3 4 5 6 7 8 9 10 11 | |
クライアント認証情報グラントトークン
冒頭の趣旨を実現するために、マシン-マシン間の認証に最適、という認証方式を採用する。
Kanel.phpに追加
/app/Http/Kanel.php
1 2 3 4 | |
アクセストークンの取得
以下にアクセスして取得出来る。
・リクエスト
1
| |
| 項目 | 内容 | |
|---|---|---|
grant_type |
client_credentials | |
|
client_id |
発行したクライアントのID(数字) | | |
client_secret |
発行したクライアントのシークレット | | |
scope |
アクセスするスコープ | |
・レスポンス
1 2 3 4 5 | |
発行されたトークンは、oauth_access_tokensテーブルに格納されていく。
有効期限
デフォルトではトークンの有効期限は1年間となっている。
変更するには、AuthServiceProviderのbootメソッドから変更可能。
/app/Providers/AuthServiceProvider.php
1 2 3 4 5 6 7 8 | |
APIへのアクセス
上記トークンを使用してアクセス制限をかけたAPIへアクセスする。
ルートに追加
追加したミドルウェアを使用して、apiのルートにこの認証で使用するエンドポイントのリクエストを追加。
/routes/api.php
1 2 3 | |
アクセス
apiのルーティングは、/api以下に作成される。
よって、エンドポイントは以下になる
1
| |
ヘッダにアクセストークンを付与してアクセスする。
- Authorization :
Bearer YOUR-ACCESS-TOKEN
エラー
アクセストークンが間違っているなどの場合は、InvalidArgumentExceptionが発生する。