Laravel Passportのクライアント認証を試してみる
Laravel Passportを使ってAPIからのアクセスにOAuth認証をかけたい。
一般に公開するものではなく、特定のクライアントからのアクセスのみを想定する。
そのため、ユーザデータは使用しない。
インストール
Laravel Passportをインストール。
1
|
|
Package Auto-Discovery に対応しているため、プロバイダに追加してやる作業は必要ない。
セットアップ
DBに必要なテーブルを作成する。
1
|
|
OAuth用に以下のテーブルが作成される。
oauth_access_tokens
oauth_auth_codes
oauth_clients
oauth_personal_access_clients
oauth_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
が発生する。