firebase/php-jwt(WordPress)

🔑 JWTとは?

JSON Web Token の略。
一言でいうと、「署名付きの使い捨て通行証」 です。

仕組み

JWTは 3つの部分 から成り立っています:

ヘッダー (Header)

  • 署名方式などを記載
  • 例: { "alg": "HS256", "typ": "JWT" }

ペイロード (Payload)

  • 中身(ユーザーID、発行時間、有効期限など)
  • 例: { "user": "fishing-app", "exp": 1692931200 }

署名 (Signature)

  • 秘密鍵で署名されたハッシュ値
  • 改ざんを防止するために必須

🛠️ JWTの流れ(イメージ)

  1. iOSアプリ → サーバー
    • 「トークンをください!」と認証用の秘密情報を送る(例えば固定キー)
  2. サーバー → iOSアプリ
    • サーバー側が「有効期限つきJWT」を発行して返す
    • 例:10分間有効
  3. iOSアプリ → サーバーAPI
    • APIを呼ぶときに「JWT」をヘッダーに付与して送る
    • 例:Authorization: Bearer xxxxx.yyyyy.zzzzz
  4. サーバー側
    • JWTを検証(署名が正しいか、有効期限が切れてないか)
    • OKならAPI結果を返す

WordPressにfirebase/php-jwtをインストールする方法

PHPが動作する場所で【exec】関数を使う

PHPが動けばどこでも良いみたいなのでREST API練習ついででfunctions.phpに書いてみた。
コマンドは1行で書けそうだがよくわからんので分けた。

以下の記述をしてfunctions.phpを更新後、エンドポイントを叩いた後にレンタルサーバーのファイル管理で /home/ユーザー名/ドメイン名/public_html/vendor/firebase/php-jwt/ が出来ていれば成功。

自分で直接アップロードする

ローカルに落とした vendor フォルダーを public_html の下に置く

エンコード、発行

デコード、認証する

1. JWT::decode

  • クライアント(iOSアプリ)から送られてきた JWT文字列 $jwt をデコードします。
  • 署名の正当性をチェックするために、秘密鍵 JWT_SECRET_KEY とアルゴリズム(ここでは 'HS256'(ハッシュ技術))を指定しています。

2. 認証の仕組み

  • JWT は「ヘッダ」「ペイロード」「署名」の3部構成。
  • サーバーは受け取ったトークンの 署名が自分の秘密鍵と一致するか を確認。
    → 一致すれば「このトークンは改ざんされていない」と判断できます。

3. $decoded

  • 認証に成功すると $decoded にペイロードの内容(例: user_idexp 有効期限)がオブジェクトとして返ります。
  • 逆に秘密鍵が違ったり、有効期限が切れていたりすると 例外が投げられます

4. return true;

  • ここではシンプルに「認証OKなら true を返す」という設計になっています。
  • 実際の運用では $decoded の中身(exp など)をチェックして、期限切れなら false を返す、など追加できます。

コメント

タイトルとURLをコピーしました