【Laravel】middleware(‘auth:api’)とmiddleware(‘auth’)の違い

2024年6月27日Laravel,PHP

kamiです。
TwitterYoutubeもやってます。

今回はmiddleware('auth:api’)とmiddleware('auth’)の違いの紹介です。

middleware(ミドルウェア)とは?

middlewareとは、HTTPリクエストが送られたタイミングで、
受信されてからレスポンスが返されるまでの間に実行される処理をカプセル化したものです。

ミドルウェアの実行の違い

今回はauthのミドルウェアを使用して紹介します。

    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('auth:api');
    }

「auth」と「auth.api」は、一見違うように見えますが同じミドルウェアです。

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
    ]

スポンサードサーチ

authとauth.apiの違い

auth

webガードを使用して、authミドルウェアで指定します。

$this->middleware('auth');

auth:api

apiガードを使用して、auth:apiミドルウェアで指定します。

$this->middleware('auth.api');

webガードとapiガードの役割

icon

そもそもなんでwebガードとapiガードで異なる違いがあるのか?

認証メカニズム

webガード

webガードはセッションを使用して認証を行い、ブラウザのクッキーにセッションIDを保存します。

  • セッションベースの認証を使用するため、ブラウザがクッキーを通じてセッションIDを管理します。
  • ブラウザを通じてのログインフォームやセッション管理に適しています。

apiガード

apiガードはトークンを使用して認証を行います。

  • トークンベースの認証を使用するため、リクエストごとにトークンが必要です。
  • APIリクエストの認証に適しており、トークンを使用してユーザーを認証します。

用途

ブラウザを通じたウェブアプリケーションと、外部システムとのAPI通信とでは、認証の仕組みやセキュリティ上の要件が異なることがあります。
それに対応するために、異なるガードを使用します。

webガード

authミドルウェアを使用してリクエストを認証します。
config/auth.phpで設定されたデフォルトのガードを使用します。

  • ブラウザを通じてのユーザー認証に使用します。
  • セッションベースの認証メカニズムを使用します。
  • デフォルトのログインフォームやセッション管理に適しています。
  • ユーザーがブラウザを介してアプリケーションにログインする際にユーザー認証として使用されます。

apiガード

auth:apiミドルウェアは、authミドルウェアの拡張です。
auth:apiミドルウェアを使用することで、APIリクエストに対してapiガードを使用して認証を行います。

  • API経由でのユーザー認証に使用します。
  • トークンベースの認証メカニズムを使用します(例: Laravel PassportまたはLaravel Sanctumを使用)。
  • APIリクエストに対してトークンを発行し、そのトークンを使用してユーザーを認証します。
  • モバイルアプリケーションや外部サービスとの連携に適しています。

スポンサードサーチ

まとめ

結論としては使用するガードでミドルウェアを分けたらいいってことです。
ミドルウェ側は変わらず、実行するガードのみを変えているということです。

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,]]
         // 以下省略
    ]


セキュリティを高める点でも個人的にはauth.apiをおすすめします。

$this->middleware('auth.api');

Laravel,PHPLaravel

Posted by kami