PHPのJWT認証の基本とは?初心者でもわかるJSON Web Tokenの使い方
生徒
「ログインしたユーザーの情報をPHPで安全に管理したいんですが、何か方法はありますか?」
先生
「それなら“JWT(ジェイ・ダブリュー・ティー)認証”を使う方法がありますよ。JSON Web Tokenという仕組みです。」
生徒
「なんだか難しそうな名前ですね……どういう仕組みなんですか?」
先生
「イメージしやすく説明していくので、安心してください。まずはJWTの基本から見ていきましょう!」
1. JWT(JSON Web Token)とは?
JWTとは「ジェイ・ダブリュー・ティー」と読み、「JSON Web Token(ジェイソン・ウェブ・トークン)」の略です。Webアプリケーションでユーザーの認証情報を安全にやりとりするための仕組みです。
簡単に言うと、「本人確認ができた印(しるし)」をコンパクトな文字列にして、ユーザーに持たせておく方法です。
例えば、映画館で一度チケットを買ったら、途中で外に出てもチケットを見せればまた入れますよね。あのチケットのような役割をするのがJWTです。
2. なぜPHPでJWTを使うのか?
PHPでWebサービスを作るとき、セッションを使ってログイン状態を管理するのが一般的ですが、API(エーピーアイ)など外部からのアクセスが増えるとセッション管理が難しくなります。
そこで活躍するのがJWTです。セッションを使わずに、ユーザーの認証状態をトークンとして保持でき、サーバー側に保存しておく必要がありません。
つまり、PHPでも「セッションレス」でユーザー管理ができる仕組みとして、JWTが注目されています。
3. JWTの構成は3つのパート
JWTは次の3つの部分で構成されます。
- ① ヘッダー(Header)
- ② ペイロード(Payload)
- ③ 署名(Signature)
ヘッダーには「これはJWTですよ」という情報、ペイロードには「ユーザーIDや有効期限」などのデータ、署名にはそれらが改ざんされていないかのチェック情報が入ります。
すべてが1本の長い文字列になっており、例えばこんな見た目になります:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJleHAiOjE3MDAwMDAwMDB9.sXsi8x9L3x9H1xFf8xXk8-abc123XYZ
4. PHPでJWTを使うためのライブラリ
JWTの処理をPHPで一から書くのは大変なので、専用のライブラリを使うのが一般的です。もっともよく使われているのは「firebase/php-jwt」というライブラリです。
これはComposerというパッケージ管理ツールを使ってインストールできます。
composer require firebase/php-jwt
初心者の方は少し難しく感じるかもしれませんが、「必要な機能をあらかじめ用意してくれている便利セット」と考えておけばOKです。
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を使って認証チェックする方法
トークンを受け取ったら、今度はそれが正しいかどうかチェックします。これが認証処理です。
<?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認証のメリットと注意点
JWT認証には次のようなメリットがあります:
- ・セッションが不要でAPIと相性が良い
- ・トークンを渡すだけで認証が完了する
- ・パスワードなどの機密情報を毎回送らなくて済む
一方で、注意点もあります:
- ・トークンは改ざんできないが、盗まれると悪用される
- ・HTTPS(暗号化通信)で安全にやりとりすることが必須
- ・トークンは定期的に更新・失効する仕組みが必要
このように、正しく使えば便利で安全な方法ですが、最低限のルールを守ることが重要です。