Laravel Sanctum のAPI TokenをGETパラメータで認証させる

Laravel SanctumとはAPI向けの軽量認証システムですが、作成できる API Token は基本的にヘッダー情報に記載する事で認証する事ができます。

例えば以下のヘッダー情報を追加することで認証することができます。

Authorization: Bearer <作成したAPI Token>

ヘッダー情報による認証にしか対応していませんが、GETパラメータに追加することで認証させる機能を追加する方法を紹介していきます。

ちなみに、GETパラメータに付与した情報はリファラ等で漏洩する可能性もあるため、使用する場合には漏洩する危険が無い部分で使用することを推奨します。

GETパラメータで認証する方法

Middlewareで解決します。

php artisan make:middleware AddSanctumTokenToHeaders
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class AddSanctumTokenToHeaders
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->has('token') && !$request->headers->has('Authorization')) {
            $request->headers->set('Authorization', 'Bearer ' . $request->token);
        }
        return $next($request);
    }
}
<?php

    protected $middlewareGroups = [
        'api' => [
            \App\Http\Middleware\AddSanctumTokenToHeaders::class, // <- 追加
        ],
    ];

参考: https://stackoverflow.com/questions/71066214/autheticate-via-laravel-sanctum-by-passing-token-as-a-get-query-parameter

上記の設定を行えば、例えばcurlなどで簡単に認証を突破する事が可能になります

curl 'https://laravel.test/api/user?token=<作成したAPI Token>'

API Tokenの作成については公式ドキュメントを確認するか

https://laravel.com/docs/10.x/sanctum#issuing-api-tokens

Sanctumを含む Jetstream による API Token作成画面を使用して作成することができます。

https://jetstream.laravel.com/features/api.html

終わりに

以上、SanctumをGETパラメータで認証させる方法でした。

本日もお疲れ様でした。