LaravelでOAuth認証を設定するために「Passport」を使用する方法について、完全かつ包括的な記事を作成します。OAuth認証は、特にモバイルアプリケーションやサードパーティーサービスとの統合において非常に便利な方法です。Laravel Passportは、OAuth2サーバーを簡単に構築できるパッケージで、認証やトークン管理を簡素化します。
1. Laravel Passportのインストール
まず最初に、LaravelアプリケーションにPassportをインストールします。以下の手順で進めていきます。
ステップ1: Passportのインストール
ターミナルで以下のコマンドを実行し、Passportをインストールします。
bashcomposer require laravel/passport
このコマンドは、PassportパッケージをLaravelアプリケーションにインストールします。
ステップ2: Passportのマイグレーションと設定
次に、Passportのテーブルをデータベースにマイグレートします。以下のコマンドを実行します。
bashphp artisan migrate
これにより、personal_access_tokens、oauth_clients、oauth_access_tokensなどの必要なテーブルがデータベースに作成されます。
ステップ3: Passportのサービスプロバイダーを登録
config/app.phpファイルのproviders配列に、Passportのサービスプロバイダーを追加します。Laravel 5.5以降では、パッケージの自動発見機能により、手動で登録する必要はありませんが、万が一手動で登録する必要がある場合は以下のように記述します。
php'providers' => [
// その他のプロバイダー...
Laravel\Passport\PassportServiceProvider::class,
],
ステップ4: Passportの設定を実行
Passportの設定を行います。ターミナルで以下のコマンドを実行します。
bashphp artisan passport:install
これにより、クライアントIDとシークレットキーが生成され、oauth_clientsテーブルに保存されます。また、アクセストークンの暗号化に必要なキーも生成されます。
2. Passportを使用した認証設定
次に、Passportを使った認証を設定します。
ステップ1: AuthServiceProviderの設定
app/Providers/AuthServiceProvider.phpを開き、Passport::routes()メソッドをbootメソッド内に追加します。このメソッドは、Passportのルートを設定し、API認証に必要なアクセストークンを発行できるようにします。
phpuse Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
ステップ2: Userモデルの設定
次に、UserモデルでPassportを使用できるようにします。app/Models/User.phpファイルを開き、Laravel\Passport\HasApiTokensトレイトを使用するようにします。
phpuse Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
}
これで、UserモデルがAPIトークンを使用できるようになります。
ステップ3: APIガードの設定
config/auth.phpを開き、APIガードのdriverをpassportに変更します。この設定により、API認証がPassportを使用して行われます。
php'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
3. OAuthクライアントの作成
OAuth2を使用してクライアントを作成する手順を説明します。通常、クライアントアプリケーションがアクセストークンを取得するために必要な「クライアントID」と「シークレットキー」を発行する必要があります。
ステップ1: クライアントIDの作成
ターミナルで以下のコマンドを実行すると、新しいクライアントIDとシークレットキーが発行されます。
bashphp artisan passport:client --personal
これにより、パーソナルアクセストークンを発行するためのクライアントIDとシークレットが生成されます。これらは、クライアントアプリケーションでアクセストークンをリクエストするために使用されます。
4. APIルートの設定
APIルートを設定するには、routes/api.phpファイルを開きます。以下は、OAuth認証を必要とするルートの例です。
ステップ1: APIルートの設定
phpuse Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProfileController;
Route::middleware('auth:api')->get('/user', [ProfileController::class, 'show']);
ここでは、auth:apiミドルウェアを使用して、APIトークンが必要なルートを保護しています。
ステップ2: コントローラーの作成
ProfileControllerを作成し、ユーザーのプロフィールを返すように設定します。
bashphp artisan make:controller ProfileController
コントローラーで、認証されたユーザーの情報を取得するコードを記述します。
phpnamespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function show(Request $request)
{
return response()->json($request->user());
}
}
これで、/userエンドポイントにアクセスすると、アクセストークンで認証されたユーザーの情報が返されます。
5. トークンの取得
アクセストークンを取得するために、クライアントアプリケーションは以下のようにリクエストを送信します。通常、これはOAuth2のpassword grantを使用して行われます。
ステップ1: トークンリクエスト
bashcurl -X POST http://your-domain.com/oauth/token \
-d "grant_type=password" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "[email protected]" \
-d "password=user_password" \
-d "scope="
成功すると、アクセストークンが返され、そのトークンを使ってAPIにアクセスできます。
6. アクセストークンの検証
アクセストークンが正しいことを確認するために、auth:apiミドルウェアがトークンを検証し、認証されたユーザーをリクエストに紐づけます。これにより、トークンが有効であれば、ユーザーの情報を取得できます。
bashcurl -X GET http://your-domain.com/api/user \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
成功すると、ユーザー情報がJSON形式で返されます。
結論
Laravel Passportを使用することで、OAuth2認証を簡単に実装できます。これにより、モバイルアプリケーションやサードパーティーとのセキュアな連携が可能となり、認証の安全性が大きく向上します。上述の手順を実行することで、簡単にOAuthサーバーを構築し、APIベースのアプリケーションでの認証機能を実装することができます。
