Skip to main content

Sanctum とは

Laravel Sanctum は、SPA(シングルページアプリケーション)・モバイルアプリ・シンプルなAPIに向けた軽量な認証パッケージです。複雑なOAuthの知識がなくても、ユーザーごとに複数のAPIトークンを発行・管理できます。 Sanctum が解決する問題は2つあります。
自社SPAからAPIを呼び出す場合はSPA認証を使います。モバイルアプリやサードパーティがAPIを利用する場合はAPIトークン認証を使います。どちらか一方だけを使うことも構いません。

Passport との使い分け

外部サービスに対してOAuth2プロバイダーになる必要がある場合は Passport を選びますが、多くのアプリケーションでは Sanctum で十分です。

インストールと設定

インストール

install:api Artisanコマンドを実行するだけで Sanctum がセットアップされます。
このコマンドは以下を自動的に行います。
  • laravel/sanctum パッケージのインストール
  • personal_access_tokens テーブルのマイグレーションファイルの公開
  • マイグレーションの実行

HasApiTokens トレイトを追加する

User モデルに HasApiTokens トレイトを追加します。
これで $user->createToken()$user->tokens などのメソッドが使えるようになります。

API トークン認証

トークンフロー

トークンを発行する

createToken() メソッドでトークンを発行します。plainTextToken プロパティから平文のトークン値を取得できます。平文トークンはデータベースには保存されないため、発行直後にユーザーへ返す必要があります。
データベースには SHA-256 でハッシュ化されたトークンが保存されます。

スコープ(アビリティ)を設定する

トークンに対してアビリティ(スコープ)を付与することで、そのトークンで実行できる操作を制限できます。
リクエスト処理時にトークンのスコープを確認します。

ミドルウェアでスコープを確認する

bootstrap/app.php にミドルウェアエイリアスを登録します。
ルートにミドルウェアを適用します。

トークンの有効期限

デフォルトでは Sanctum トークンに有効期限はありません。config/sanctum.phpexpiration オプションで分単位の有効期限を設定できます。
トークンごとに有効期限を指定することもできます。
有効期限を設定している場合は、期限切れトークンを定期的に削除するスケジュールを設定します。

トークンを失効させる


SPA 認証

SPA認証はセッションCookieを使うため、トークンを発行・管理する必要がありません。自社フロントエンド(Vue, React, Next.js等)からAPIを呼び出す場合に適しています。
SPA認証を使うには、SPAとAPIが同じトップレベルドメインを共有している必要があります(サブドメインは異なっても構いません)。また、リクエストに Accept: application/json ヘッダーと Referer または Origin ヘッダーを含める必要があります。

Sanctum ミドルウェアを有効にする

bootstrap/app.phpstatefulApi() ミドルウェアを有効にします。

ファーストパーティドメインを設定する

config/sanctum.phpstateful オプションにSPAのドメインを設定します。

CORS の設定

別のサブドメインからAPIを呼び出す場合は、CORS設定が必要です。
config/cors.phpsupports_credentialstrue に設定します。
フロントエンドの axios にも設定が必要です。
セッションCookieのドメイン設定も忘れずに行います。

SPA からの認証フロー

1

CSRF クッキーを取得する

ログイン前に /sanctum/csrf-cookie エンドポイントを叩いてCSRF保護を初期化します。
2

ログインリクエストを送信する

/login エンドポイントにPOSTリクエストを送ります。
3

認証済みリクエストを送る

ログイン後のリクエストはセッションCookieで自動的に認証されます。

認証済みルートの保護

auth:sanctum ミドルウェアをルートに適用すると、未認証のリクエストに対して 401 Unauthorized が返されます。APIトークン認証・SPA認証の両方をこのミドルウェア1つで処理できます。

実用例: ログイン API とトークン返却

モバイルアプリ向けのAPIトークン認証を実装する例です。
1

ログインエンドポイントを作成する

2

認証済みルートを作成する

3

クライアントからリクエストを送る


テスト

Sanctum のテストでは Sanctum::actingAs() を使ってユーザーを認証し、付与するアビリティを指定します。

まとめ

User モデルに HasApiTokens トレイトを追加:
  • APIトークン認証: モバイルアプリ、サードパーティ、CLIツールなど、セッションを持たないクライアントから利用する場合。
  • SPA認証: 自社のVue/React/Next.jsフロントエンドなど、同じドメイン(またはサブドメイン)上のSPAから利用する場合。よりセキュアでトークン管理が不要。
最終更新日 2026年4月2日