概要
Sanctumでのトークンを用いたAPI認証の設定方法やその他知識を雑にまとめる。
前提
本記事の内容はlaravelにSanctumのライブラリが入っている状態を前提とする。
情報
雑な情報
API認証トークンを発行するための設定
Sanctumで使われるAPI認証トークンは指定したテーブル(に紐づくモデル)のレコードを指定して発行する。
テーブルとレコードの指定方法は下記
- 指定したいテーブルに紐づくモデルを下記の様に書き換え
- 継承元を
Illuminate\Foundation\Auth\User
に変更 -
Laravel\Sanctum\HasApiTokens
トレイトをuse
- 継承元を
API認証トークンの発行
上記の設定ができている状態で下記のように記述するとAPI認証トークンを取得する事ができる。
$apiToken = 指定したいテーブルのレコードのモデルインスタンス->createToken('トークンの名称{大体はapi-tokenとかweb-tokenとかのトークンをまとめる単位での名前}')->plainTextToken;
これをAPIのレスポンスとして返す。
API認証トークンの有効期限
API認証トークンの有効期限は様々な方法で設定できる。
-
config/sanctum.php
で設定:デフォルトで'expiration' => null,
のように記載されているのでこのnullの部分を分単位で指定 - トークン作成時に設定:
指定したいテーブルのレコードのモデルインスタンス->createToken()
を実行するときの第三引数でDateTimeInterfaceの型で期限切れになる日時を渡す。now()->addHours(24)
(今から24時間後の日時)とかを渡しがち。DateTimeInterfaceを実装している型なら何でもいいのでDateTime型、Carbon型、CarbonImutable型でもいい - .envで設定:
SANCTUM_EXPIRATION=1440
などの任意のキー名で設定しconfig/sanctum.php
で'expiration' => env('SANCTUM_EXPIRATION', null),
のように設定
API認証の突破
認証が必要なAPIにリクエストを投げる際に、ログイン時に返されたAPI認証トークンをどのように用いるかを記載する。
下記のようにヘッダに指定することで認証を突破できる。
curl -X GET http://localhost/{認証が必要なAPIのパス} -H "Authorization: Bearer API認証トークン"
ヘッダに設定されたトークンに問題が無いかは、認証が必要なAPIとしてルーティングで下記の様に設定した場合にミドルウェアで勝手に検証される。
api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', [AuthController::class, 'user']);
});