0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Day15 — JWTとは?仕組みを図解しながらLaravelで発行してみる

0
Last updated at Posted at 2025-12-14

はじめに

Day14 では、

✅ コントローラを薄く保つ設計
✅ Service / FormRequest に責務を分離

まで進みました。

ここからは 本格的な認証編 に入ります。

今日のゴール

・JWT が「何者か」を言語化できる

・セッション認証との違いが分かる

・JWT の中身(構造)を理解する

・Laravel で JWT を発行する流れを掴む

認証とは何か?まずは整理

認証とは一言で言うと、

「あなたは誰ですか?」を確認する仕組み

Web では主にこの2種類があります。

認証方式 主な用途
セッション認証 従来のWebアプリ
トークン認証 SPA / API

今回は SPA × API で主流の
👉 JWT 認証 を扱います。

JWT とは?

JWT とは、

JSON Web Token

の略です。

特徴を一言で言うと、

「ユーザー情報を自分自身に持ったトークン」
サーバが状態を持たない(ステートレス)認証

セッション認証との違い

項目 セッション JWT
認証情報 サーバに保存 トークンに内包
スケール 弱い 強い
SPA 相性△ 相性◎
API 不向き 最適

JWT の中身を分解してみる

JWT は 次に説明する3つのパーツ 構成されています。

① Header

{
  "alg": "HS256",
  "typ": "JWT"
}

・署名方式

・トークンの種類

② Payload(重要)

{
  "user_id": 1,
  "email": "test@example.com",
  "exp": 1700000000
}

・ユーザー情報

・有効期限(exp)

暗号化ではなく Base64 エンコード

→ 中身は誰でも読める

③ Signature

HMACSHA256(
  base64(header) + "." + base64(payload),
  SECRET_KEY
)

・改ざん防止用署名

ヘッダーとペイロードがエンコードされ、
シークレットで署名された状態となることにより、信頼できる

これら3つがドットで区切られて連結された情報として渡されます。

xxxxx.yyyyy.zzzzz

JWT 認証の流れ(超重要)

① ログイン(ID/PW)
② サーバが JWT を発行
③ フロントが保存
④ リクエスト時に JWT を送信
⑤ サーバが検証

図にすると:

[React]
  ↓ ログイン
[Laravel]
  ↓ JWT発行
[React](保存)
  ↓ Authorization: Bearer xxx
[Laravel]

Laravel で JWT を発行する流れ(概念)

※ 実装詳細は Day16 でやります。
今日は 全体像の理解 が目的です。

① ログイン API

public function login(Request $request)
{
    // 認証チェック
    if (!$token = auth()->attempt($request->only('email', 'password'))) {
        return response()->json([
            'status' => 'error',
            'message' => '認証失敗'
        ], 401);
    }

    return response()->json([
        'status' => 'success',
        'token' => $token
    ]);
}

② フロント側で保存

localStorage.setItem('token', token);

③ API リクエスト時に送信

fetch('/api/posts', {
  headers: {
    Authorization: `Bearer ${token}`
  }
});

JWT で必ず理解すべき注意点

JWT は安全ではない?

中身は誰でも読める
改ざんできない

→ 機密情報は入れない
→ ID・メール程度に留める

永遠に有効な JWT は危険

"exp": 9999999999

→ ❌ セキュリティ事故

✅ 有効期限を必ず設定する

localStorage 保存は危険?

・XSS に弱い

・だが SPA では現実的選択肢

※ Cookie 認証との比較は Day16 で解説

JWT が使われる理由まとめ

・SPA と相性が良い

・サーバが軽い

・API 設計に向いている

・モバイルアプリとも共通化できる

今日のまとめ

・JWT はトークン認証の代表格

・セッション認証とは思想が違う

・JWT は Header / Payload / Signature の3部構成

・中身は読めるが改ざんできない

・SPA × API ではほぼ必須の知識

次回 Day16

次は実装編です。

Day16 — Bearer Token と Cookie 認証の比較&LaravelでJWT認証を実装する

ここから
👉 ログインできる API
になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?