Laravel Passport
はじめに
Laravel Passport は、数分で Laravel アプリケーションに完全な OAuth2 サーバーの実装を提供します。Passport は、Andy Millington と Simon Hamp によってメンテナンスされている League OAuth2 server の上に構築されています。
このドキュメントでは、OAuth2 について既に理解していることを前提としています。OAuth2 について何も知らない場合は、続行する前に一般的な 用語 と機能について理解することを検討してください。
Passport または Sanctum?
始める前に、アプリケーションが Laravel Passport または Laravel Sanctum のどちらが適しているかを判断することができます。アプリケーションが絶対に OAuth2 をサポートする必要がある場合は、Laravel Passport を使用する必要があります。
ただし、単一ページアプリケーション、モバイルアプリケーション、または API トークンを発行する場合は、Laravel Sanctum を使用する必要があります。Laravel Sanctum は OAuth2 をサポートしていませんが、よりシンプルな API 認証開発体験を提供します。
インストール
install:api Artisan コマンドを使用して Laravel Passport をインストールできます:
php artisan install:api --passport
このコマンドは、OAuth2 クライアントとアクセストークンを保存するためにアプリケーションが必要とするテーブルを作成するために必要なデータベースマイグレーションを公開および実行します。また、セキュアなアクセストークンを生成するために必要な暗号化キーも作成します。
さらに、このコマンドは、Passport Client モデルの主キー値として自動増分整数の代わりに UUID を使用するかどうかを尋ねます。
install:api コマンドを実行した後、App\Models\User モデルに Laravel\Passport\HasApiTokens トレイトを追加してください。このトレイトにより、モデルにいくつかのヘルパーメソッドが提供され、認証されたユーザーのトークンとスコープを調べることができます:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
最後に、アプリケーションの config/auth.php 構成ファイルで、api 認証ガードを定義し、driver オプションを passport に設定する必要があります。これにより、着信 API リクエストの認証に Passport の TokenGuard を使用するようにアプリケーションに指示されます。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Passportの展開
Passportをアプリケーションのサーバーに初めて展開する際には、おそらくpassport:keysコマンドを実行する必要があるでしょう。このコマンドは、アクセストークンを生成するためにPassportが必要とする暗号化キーを生成します。生成されたキーは通常、ソースコントロールに保存されません:
php artisan passport:keys
必要に応じて、Passportのキーを読み込むパスを定義することができます。これを実現するためには、Passport::loadKeysFromメソッドを使用することができます。通常、このメソッドは、アプリケーションのApp\Providers\AppServiceProviderクラスのbootメソッドから呼び出すべきです:
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Passport::loadKeysFrom(__DIR__.'/../secrets/oauth');
}
環境からキーを読み込む
または、vendor:publish Artisanコマンドを使用してPassportの設定ファイルを公開することができます:
php artisan vendor:publish --tag=passport-config
設定ファイルを公開した後、アプリケーションの暗号化キーを環境変数として定義することができます:
PASSPORT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
<private key here>
-----END RSA PRIVATE KEY-----"
PASSPORT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
<public key here>
-----END PUBLIC KEY-----"