Laravel10 APIトークン認証を使って、安全にAPIを公開する方法

はじめに

LaravelでAPIを公開したいけど、認証なしで誰でもアクセスできるのは避けたい…。
そんなときに便利なのが「APIトークン認証」です。

今回は、認証なし・ログインなし・CSRFなしでも
最低限のアクセス制御を実現する方法を解説します!

なぜAPIトークン認証が必要?

  • パブリックAPIにしたくない
  • セッションベース認証が使えない(ヘッドレス)
  • でも、簡単にアクセス制御したい!

というケースにピッタリです。

実装方法

1. トークンを.envに定義

MY_API_SECRET=トークンを設定

2.ミドルウェアを作成

php artisan make:middleware ApiTokenAuth

3.ミドルウェアを編集

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class ApiTokenAuth
{
    public function handle(Request $request, Closure $next)
    {
        $token = $request->header('X-API-TOKEN');

        if ($token !== env('MY_API_SECRET')) {
            return response()->json(['message' => 'Unauthorized'], 401);
        }

        return $next($request);
    }
}

4.Kernel.phpに登録

protected $middlewareAliases = [
    // 既存のもの
    'api.token' => \App\Http\Middleware\ApiTokenAuth::class,
];

5.ルートにミドルウェアを適用

Route::middleware('api.token')->group(function () {
    Route::get('/your-api-endpoint', [ApiController::class, 'yourMethod']);
});

コールする側のコード例

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'X-API-TOKEN' => env('TARGET_API_TOKEN'),
])->get('https://example.com/api/your-api-endpoint');

if ($response->successful()) {
    $data = $response->json();
    // データ処理
}

.envに送信トークンを設定します。

TARGET_API_TOKEN=トークンを設定

※MY_API_SECRETとTARGET_API_TOKENは同じでないと認証エラーになります。

セキュリティ面の注意点

  • 必ずHTTPSを使う(HTTPは絶対ダメ)
  • IP制限を併用するとさらに安全

まとめ

APIトークン認証はとてもシンプルですが、適切な使い方をすれば強力な防御手段になります!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です