Laravel Passportを使ったAPI認証入門:設定から実装まで徹底解説

Laravel入門

APIは現代のアプリケーションにおいて不可欠な要素であり、そのセキュリティを担うのが認証・認可の仕組みです。Laravelは、PHPフレームワークとして広く用いられていますが、その中でもAPIの認証に使われるツールが「Laravel Passport」です。この記事では、Laravel Passportを用いたAPI認証の基本から、実際の設定・実装方法を詳しく解説します。

Laravel Passportとは?

Laravel Passportは、OAuth2サーバーを迅速に構築するための公式パッケージです。OAuth2は、第三者へのセキュアなデータアクセスを許可する業界標準プロトコルで、Passportを利用することで、このプロトコルを用いた認証を簡単に実装できます。このパッケージは、特にLaravelを使ったAPI開発において、その導入のしやすさから多くの開発者に支持されています。

Laravel Passportのインストール

まず初めに、Passportをプロジェクトにインストールします。これはComposerを使って簡単に完了できます。

composer require laravel/passport

インストールが完了したら、Passportのサービスプロバイダをconfig/app.phpに登録します。Laravel 5.5以降を使っている場合、この手順は必要ありません。

'providers' => [
    // ...
    Laravel\Passport\PassportServiceProvider::class,
],

次に、Passportのマイグレーションファイルをセットアップします。

php artisan migrate

これで必要なテーブルがデータベースに作成されます。次に、Passportの初期設定を行います。

php artisan passport:install

このコマンドは、アクセストークン、リフレッシュトークン、クライアントを管理するためのkey secretを生成します。

認証の設定

インストールが完了したら、認証ガードをconfig/auth.phpに設定します。APIガードをPassportトークンで保護されるようにします。

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

次に、LaravelのAuthServiceProviderでPassportのルートを呼び出します。

use Laravel\Passport\Passport;

public function boot()
{
    $this->registerPolicies();

    Passport::routes();
}

これで、Passportの必要な認証ルートが登録され、API認証の準備が整います。

ユーザーモデルの調整

次に、ユーザーモデルをPassportと互換性のあるように調整します。通常、App\Models\UserHasApiTokensトレイトを追加します。

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

この変更により、ユーザーはトークンを発行したり、アクセストークンを管理する能力を持つことができます。

APIルート設定

API認証を有効化したら、実際の使いたいAPIエンドポイントを定義していきます。ここでは、シンプルなルートの一例を示します。

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

このルートは、認証されたユーザーがアクセスした際に、そのユーザーの情報を返します。

トークンの発行

クライアントがAPIにアクセスするには、有効なアクセストークンが必要です。通常、最初のトークンはユーザーがログインするときに発行されます。以下は、Passportを用いてアクセストークンを発行するコントローラのサンプルです。

public function login(Request $request)
{
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
        $user = Auth::user();
        $token = $user->createToken('MyApp')->accessToken;
        return response()->json(['token' => $token], 200);
    } else {
        return response()->json(['error' => 'Unauthorised'], 401);
    }
}

このコントローラメソッドは、ユーザーが正しい資格情報を提供した場合にアクセストークンを発行します。

セキュリティの考慮

APIを利用した認証では、さまざまなセキュリティの考慮が重要です。トークンの失効設定やリフレッシュトークンの管理、HTTPS通信の必須化などは特に重要です。

  • トークンの寿命設定: デフォルトでは、Laravel Passportは1年間トークンを有効にしますが、Passport::tokensExpireIn(Carbon::now()->addDays(15));のようにして、適切な寿命を設定しましょう。

  • HTTPSの使用: トークンはクリアテキストで送信されるため、SSL/TLSでプロテクトすることを忘れずに。

以上の設定と実装で、Laravel Passportを用いたAPI認証の基礎がしっかりとできました。次のステップとして、さらなるセキュリティ強化やOAuthのグラントタイプのカスタマイズについて学ぶのも良いでしょう。Laravel Passportは非常に柔軟で強力なツールであり、API開発における信頼性を大きく高めることができます。

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント