1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

laravel Sanctumのトークンを用いたAPI認証について雑に情報をまとめる

Posted at

概要

Sanctumでのトークンを用いたAPI認証の設定方法やその他知識を雑にまとめる。

前提

本記事の内容はlaravelにSanctumのライブラリが入っている状態を前提とする。

情報

雑な情報

API認証トークンを発行するための設定

Sanctumで使われるAPI認証トークンは指定したテーブル(に紐づくモデル)のレコードを指定して発行する。
テーブルとレコードの指定方法は下記

  1. 指定したいテーブルに紐づくモデルを下記の様に書き換え
    • 継承元を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']);
});
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?