Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
Passportとは
Laravel Passport は、Laravel アプリを OAuth2 認可サーバーとして動かすための公式パッケージです。
サードパーティアプリ連携や、厳密な OAuth2 フローが必要な API で使います。
Passport vs Sanctum
OAuth2 が必須なら Passport を選びます。
単純な API トークン認証や SPA / モバイル認証が目的なら Sanctum を選びます。
| 観点 | Passport | Sanctum |
|---|
| 目的 | OAuth2サーバー実装 | シンプルなAPI認証 |
| 向いているケース | 外部アプリ連携、OAuth2標準準拠 | 自社SPA、モバイル、個人用トークン |
| 複雑さ | 高い | 低い |
インストール
Laravel 13 の公式推奨は install:api --passport です。
php artisan install:api --passport
既存プロジェクトで手動導入する場合は、次のコマンドでもセットアップできます。
composer require laravel/passport
php artisan passport:install
初回デプロイ時は鍵生成だけ実行したいケースもあります。
php artisan passport:keys
Userモデル
User モデルに HasApiTokens トレイトと OAuthenticatable インターフェースを追加します。
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\Contracts\OAuthenticatable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable implements OAuthenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
authガード
config/auth.php の api ガードで passport ドライバーを使います。
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
サービスプロバイダー設定
AppServiceProvider の boot() でスコープ定義とトークン有効期限を設定できます。
use Carbon\CarbonInterval;
use Laravel\Passport\Passport;
public function boot(): void
{
Passport::tokensCan([
'orders:read' => '注文の参照',
'orders:create' => '注文の作成',
]);
Passport::defaultScopes(['orders:read']);
Passport::tokensExpireIn(CarbonInterval::days(15));
Passport::refreshTokensExpireIn(CarbonInterval::days(30));
Passport::personalAccessTokensExpireIn(CarbonInterval::months(6));
}
クライアント管理
認可コードグラント用クライアント
php artisan passport:client
このクライアントは、ユーザー同意画面を伴う OAuth2 の標準フローで使います。
クライアントクレデンシャルグラント用クライアント
php artisan passport:client --client
マシン間通信のエンドポイントでは EnsureClientIsResourceOwner ミドルウェアを使います。
use Laravel\Passport\Http\Middleware\EnsureClientIsResourceOwner;
Route::get('/orders', function () {
// ...
})->middleware(EnsureClientIsResourceOwner::using('orders:read'));
トークン管理
スコープ付与
$accessToken = $user->createToken(
'dashboard-token',
['orders:read', 'orders:create']
)->accessToken;
スコープチェック
use Laravel\Passport\Http\Middleware\CheckToken;
Route::get('/orders', function () {
// ...
})->middleware(['auth:api', CheckToken::using('orders:read')]);
use Laravel\Passport\Passport;
$token = Passport::token()->find($tokenId);
$token?->revoke();
APIルートの保護
ユーザーアクセストークンで保護する API には auth:api を付けます。
Route::middleware('auth:api')->group(function () {
Route::get('/user', fn (Request $request) => $request->user());
Route::get('/orders', [OrderController::class, 'index']);
});
クライアントクレデンシャルグラントのルートは auth:api ではなく EnsureClientIsResourceOwner を使ってください。
Personal Access Token
OAuth2 の完全フローを使わず、ユーザー自身が API トークンを発行する用途に向いています。
php artisan passport:client --personal
$token = $request->user()->createToken('cli-token', ['orders:read'])->accessToken;
Personal Access Token が主用途なら、Laravel公式でも Sanctum を検討することが推奨されています。
関連リンク