プログラミング

Laravel PassportでOAuth認証設定

LaravelでOAuth認証を設定するために「Passport」を使用する方法について、完全かつ包括的な記事を作成します。OAuth認証は、特にモバイルアプリケーションやサードパーティーサービスとの統合において非常に便利な方法です。Laravel Passportは、OAuth2サーバーを簡単に構築できるパッケージで、認証やトークン管理を簡素化します。

1. Laravel Passportのインストール

まず最初に、LaravelアプリケーションにPassportをインストールします。以下の手順で進めていきます。

ステップ1: Passportのインストール

ターミナルで以下のコマンドを実行し、Passportをインストールします。

bash
composer require laravel/passport

このコマンドは、PassportパッケージをLaravelアプリケーションにインストールします。

ステップ2: Passportのマイグレーションと設定

次に、Passportのテーブルをデータベースにマイグレートします。以下のコマンドを実行します。

bash
php artisan migrate

これにより、personal_access_tokensoauth_clientsoauth_access_tokensなどの必要なテーブルがデータベースに作成されます。

ステップ3: Passportのサービスプロバイダーを登録

config/app.phpファイルのproviders配列に、Passportのサービスプロバイダーを追加します。Laravel 5.5以降では、パッケージの自動発見機能により、手動で登録する必要はありませんが、万が一手動で登録する必要がある場合は以下のように記述します。

php
'providers' => [ // その他のプロバイダー... Laravel\Passport\PassportServiceProvider::class, ],

ステップ4: Passportの設定を実行

Passportの設定を行います。ターミナルで以下のコマンドを実行します。

bash
php artisan passport:install

これにより、クライアントIDとシークレットキーが生成され、oauth_clientsテーブルに保存されます。また、アクセストークンの暗号化に必要なキーも生成されます。

2. Passportを使用した認証設定

次に、Passportを使った認証を設定します。

ステップ1: AuthServiceProviderの設定

app/Providers/AuthServiceProvider.phpを開き、Passport::routes()メソッドをbootメソッド内に追加します。このメソッドは、Passportのルートを設定し、API認証に必要なアクセストークンを発行できるようにします。

php
use Laravel\Passport\Passport; public function boot() { $this->registerPolicies(); Passport::routes(); }

ステップ2: Userモデルの設定

次に、UserモデルでPassportを使用できるようにします。app/Models/User.phpファイルを開き、Laravel\Passport\HasApiTokensトレイトを使用するようにします。

php
use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; }

これで、UserモデルがAPIトークンを使用できるようになります。

ステップ3: APIガードの設定

config/auth.phpを開き、APIガードのdriverpassportに変更します。この設定により、API認証がPassportを使用して行われます。

php
'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],

3. OAuthクライアントの作成

OAuth2を使用してクライアントを作成する手順を説明します。通常、クライアントアプリケーションがアクセストークンを取得するために必要な「クライアントID」と「シークレットキー」を発行する必要があります。

ステップ1: クライアントIDの作成

ターミナルで以下のコマンドを実行すると、新しいクライアントIDとシークレットキーが発行されます。

bash
php artisan passport:client --personal

これにより、パーソナルアクセストークンを発行するためのクライアントIDとシークレットが生成されます。これらは、クライアントアプリケーションでアクセストークンをリクエストするために使用されます。

4. APIルートの設定

APIルートを設定するには、routes/api.phpファイルを開きます。以下は、OAuth認証を必要とするルートの例です。

ステップ1: APIルートの設定

php
use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProfileController; Route::middleware('auth:api')->get('/user', [ProfileController::class, 'show']);

ここでは、auth:apiミドルウェアを使用して、APIトークンが必要なルートを保護しています。

ステップ2: コントローラーの作成

ProfileControllerを作成し、ユーザーのプロフィールを返すように設定します。

bash
php artisan make:controller ProfileController

コントローラーで、認証されたユーザーの情報を取得するコードを記述します。

php
namespace 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: トークンリクエスト

bash
curl -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ミドルウェアがトークンを検証し、認証されたユーザーをリクエストに紐づけます。これにより、トークンが有効であれば、ユーザーの情報を取得できます。

bash
curl -X GET http://your-domain.com/api/user \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

成功すると、ユーザー情報がJSON形式で返されます。

結論

Laravel Passportを使用することで、OAuth2認証を簡単に実装できます。これにより、モバイルアプリケーションやサードパーティーとのセキュアな連携が可能となり、認証の安全性が大きく向上します。上述の手順を実行することで、簡単にOAuthサーバーを構築し、APIベースのアプリケーションでの認証機能を実装することができます。

Back to top button