カテゴリ: PHP 更新日: 2026/01/18

PHPのJWT認証の基本とは?初心者でもわかるJSON Web Tokenの使い方

PHP の JWT(JSON Web Token)認証の基本
PHP の JWT(JSON Web Token)認証の基本

先生と生徒の会話形式で理解しよう

生徒

「ログインしたユーザーの情報をPHPで安全に管理したいんですが、何か方法はありますか?」

先生

「それなら“JWT(ジェイ・ダブリュー・ティー)認証”を使う方法がありますよ。JSON Web Tokenという仕組みです。」

生徒

「なんだか難しそうな名前ですね……どういう仕組みなんですか?」

先生

「イメージしやすく説明していくので、安心してください。まずはJWTの基本から見ていきましょう!」

-

1. JWT(JSON Web Token)とは?

1. JWT(JSON Web Token)とは?
1. JWT(JSON Web Token)とは?

JWTとは「ジェイ・ダブリュー・ティー」と読み、「JSON Web Token(ジェイソン・ウェブ・トークン)」の略です。Webアプリケーションでユーザーの認証情報を安全にやりとりするための仕組みです。

簡単に言うと、「本人確認ができた印(しるし)」をコンパクトな文字列にして、ユーザーに持たせておく方法です。

例えば、映画館で一度チケットを買ったら、途中で外に出てもチケットを見せればまた入れますよね。あのチケットのような役割をするのがJWTです。

2. なぜPHPでJWTを使うのか?

2. なぜPHPでJWTを使うのか?
2. なぜPHPでJWTを使うのか?

PHPでWebサービスを作るとき、セッションを使ってログイン状態を管理するのが一般的ですが、API(エーピーアイ)など外部からのアクセスが増えるとセッション管理が難しくなります。

そこで活躍するのがJWTです。セッションを使わずに、ユーザーの認証状態をトークンとして保持でき、サーバー側に保存しておく必要がありません。

つまり、PHPでも「セッションレス」でユーザー管理ができる仕組みとして、JWTが注目されています。

3. JWTの構成は3つのパート

3. JWTの構成は3つのパート
3. JWTの構成は3つのパート

JWTは次の3つの部分で構成されます。

  • ① ヘッダー(Header)
  • ② ペイロード(Payload)
  • ③ 署名(Signature)

ヘッダーには「これはJWTですよ」という情報、ペイロードには「ユーザーIDや有効期限」などのデータ、署名にはそれらが改ざんされていないかのチェック情報が入ります。

すべてが1本の長い文字列になっており、例えばこんな見た目になります:


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJleHAiOjE3MDAwMDAwMDB9.sXsi8x9L3x9H1xFf8xXk8-abc123XYZ

4. PHPでJWTを使うためのライブラリ

4. PHPでJWTを使うためのライブラリ
4. PHPでJWTを使うためのライブラリ

JWTの処理をPHPで一から書くのは大変なので、専用のライブラリを使うのが一般的です。もっともよく使われているのは「firebase/php-jwt」というライブラリです。

これはComposerというパッケージ管理ツールを使ってインストールできます。


composer require firebase/php-jwt

初心者の方は少し難しく感じるかもしれませんが、「必要な機能をあらかじめ用意してくれている便利セット」と考えておけばOKです。

-

5. JWTをPHPで発行してみよう(サンプルコード)

5. JWTをPHPで発行してみよう(サンプルコード)
5. JWTをPHPで発行してみよう(サンプルコード)

ログイン成功後にJWTを作る方法の例です。ユーザーIDをトークンに含めて発行します。


<?php
use Firebase\JWT\JWT;

$key = "secret_key";
$payload = [
    "user_id" => 1234,
    "exp" => time() + 3600
];

$jwt = JWT::encode($payload, $key, 'HS256');
echo $jwt;
?>

expは有効期限で、1時間後(3600秒)に設定しています。これで安全にユーザー情報をトークンとして渡せます。

6. JWTを使って認証チェックする方法

6. JWTを使って認証チェックする方法
6. JWTを使って認証チェックする方法

トークンを受け取ったら、今度はそれが正しいかどうかチェックします。これが認証処理です。


<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

$jwt = $_GET['token']; // 例:URLにtokenが付いている
$key = "secret_key";

try {
    $decoded = JWT::decode($jwt, new Key($key, 'HS256'));
    echo "ユーザーID:" . $decoded->user_id;
} catch (Exception $e) {
    echo "トークンが無効です";
}
?>

トークンが正しければユーザーIDなどの情報が取り出せます。もし偽物や期限切れのトークンならエラーになります。

7. JWT認証のメリットと注意点

7. JWT認証のメリットと注意点
7. JWT認証のメリットと注意点

JWT認証には次のようなメリットがあります:

  • ・セッションが不要でAPIと相性が良い
  • ・トークンを渡すだけで認証が完了する
  • ・パスワードなどの機密情報を毎回送らなくて済む

一方で、注意点もあります:

  • ・トークンは改ざんできないが、盗まれると悪用される
  • ・HTTPS(暗号化通信)で安全にやりとりすることが必須
  • ・トークンは定期的に更新・失効する仕組みが必要

このように、正しく使えば便利で安全な方法ですが、最低限のルールを守ることが重要です。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHPのJWT認証の基本とは?初心者でもわかるJSON Web Tokenの使い方
New2
PHP
PHPのUnixタイムスタンプの使い方を徹底解説!初心者でもわかる日付と時間の扱い方
New3
PHP
PHPの基本的なエラーとデバッグ方法をやさしく解説!初心者でも安心の入門ガイド
New4
PHP
PHP の Cookie の有効期限を設定する方法(expires, max-age)
-
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.2
Java&Spring記事人気No2
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.5
Java&Spring記事人気No5
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.6
Java&Spring記事人気No6
Python
Pythonのライブラリとは?標準ライブラリとサードパーティライブラリの違いを初心者向けに解説!
No.7
Java&Spring記事人気No7
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.8
Java&Spring記事人気No8
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
-
-