WordPressでJWT認証を実装するための徹底ガイド

画像[1] - WordPressでJWT認証を実装するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速対応

JWT(JSON Web Token)とは、軽量で自己完結型の認証・認可用トークンのことで、ユーザー情報(ユーザーID、ロール、権限など)をJSONオブジェクトにエンコードし、デジタル署名することで署名付きトークンを生成します。この記事では、JWTの概念と構造を詳しく紹介し、WordPressでJWTの生成と検証を実装する方法を説明します。

JWTとは何か?

JWTは、ステートレスRESTful API認証に一般的に使用されるセキュリティ・メカニズムである。渡されたトークンをサーバーが検証することで、ユーザーの身元が確かであることを保証します。JWTはクライアントとサーバー間で送信される際に暗号化されるため、情報が改ざんされるのを防ぐことができる。

JWTの構造

画像[2] - WordPressにJWT認証を導入するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速対応

JWTはヘッダー、ペイロード、シグネチャの3つの部分から構成され、以下のようにドット(.))で結ばれ、以下のように完全なJWTを形成する:

ヘッダー.ペイロード.シグネチャー
  1. ヘッダー

ヘッダーは2つの属性を含むJSONオブジェクトである:アルグ(署名アルゴリズム)と タイプ(一般的な署名アルゴリズムはHS256、RS256など)。一般的な署名アルゴリズムはHS256、RS256などです。ヘッダーはBase64Urlでエンコードされ、以下の文字列が生成されます:

{
  "alg": "HS256"、
  "typ": "JWT"
}
  1. ペイロード

ペイロードは、ユーザー情報やその他のビジネスデータを含むJSONオブジェクトでもある。この宣言は、定義済み(例えば issそして経験値そしてサブ また、ペイロードはBase64Urlエンコードされ、以下の文字列を生成する:

{
  "sub": "1234567890"、
  "name": "John Doe".
  "iat": 1516239022
}

定義済みのフィールドは以下の通り:

  • iss (発行者):発行した人
  • サブ 件名
  • 監査 観客
  • 経験値 (有効期限):有効期限
  • エヌビーエフ (発効前):発効時期
  • アイアット (発行時期
  • ジェティ (JWT ID): 固有識別子
  1. 署名

署名は、JWTの完全性とセキュリティを保証するために使用される。ヘッダー、ペイロード、そして鍵(シークレット)を署名アルゴリズムで暗号化する。以下に例を示す:

HMACSHA256(
  base64UrlEncode(header) + ".". +
  base64UrlEncode(ペイロード)、
  シークレット
)

生成された署名はJWTの最後に付加され、完全なJWTを形成する:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

WordPressにJWTを実装する

WordPressでJSON Web Token (JWT)認証を実装するには、以下の手順が必要です:

ステップ1:JWT認証プラグインをインストールする

  1. WordPressの管理画面にログインします。
  2. に移動します。 プラグイン > 新しいプラグインのインストール.
  3. 探す WP REST APIのJWT認証.
  4. プラグインをインストールして有効化します。
画像[3] - WordPressでJWT認証を実装するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速な対応

ステップ2:プラグインの設定

  1. プラグインを有効化した後、「設定」>「プラグイン設定」に移動します。 JWT認証.
  2. 設定ページでは、以下のオプションを設定する必要があります:
    • シークレット・キーこれはJWTに署名するためのキーです。キーは wp-config.php 次のコードをファイルに追加してキーを設定する:define('JWT_AUTH_SECRET_KEY', 'your-secret-key');
    • CORSを有効にするクロスドメインリクエストが必要な場合は、このオプションを有効にします。

ステップ3: .htaccessファイルを設定する

あなたのウェブサイトのルート・ディレクトリにある .htaccess 次のルールがファイルに追加される:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Authorisation} ^(.*)
RewriteRule ^(.*) - [e=http_authorization:%1] です。
</IfModule>

ステップ4:JWTの生成

以下はJWTを生成する関数である:

function wpjam_generate_jwt($payload, $secret='', $header=[]){
    // 无法生成没有设置过期时间的 JWT
    if(empty($payload['exp'])){
        return false;
    }

    $header = wp_parse_args($header, [
        'alg' => 'HS256',
        'typ' => 'JWT'
    ]);

    if($header['alg'] == 'HS256'){
        $header     = base64_urlencode(wpjam_json_encode($header));
        $payload    = base64_urlencode(wpjam_json_encode($payload));
        $jwt        = $header.'.'.$payload;
        $secret     = $secret ?: wp_salt();

        return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true));
    }
}

上記のコードは、ヘッダーとペイロードのJSONエンコードとURLセーフBase64エンコードから始まります。署名を生成するための鍵(Secret)は、空の場合はWordPressデフォルトのsalt関数を使用して生成されます。最後に、ヘッダー、ペイロード、生成された署名がドット(.))で連結され、完全なJWTを形成する。

ステップ5:JWTを認証する

JWTを検証するプロセスは、生成された逆プロセスであり、以下のように実装される:

関数 wpjam_verify_jwt($token, $secret=''){
    $tokens = explode('.').$token);

    if(count($tokens) != 3){
        return false; }.
    }

    list($header, $payload, $sign) = $tokens;

    $jwt = $header.'..$payload; $jwt = $header.
    $secret = $secret ?: wp_salt();
    $header = wpjam_json_decode(base64_urldecode($header));
    $payload = wpjam_json_decode(base64_urldecode($payload));

    if(empty($header['alg']) || $header['alg'] != 'HS256'){
        return false; }.
    }

    if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){。
        return false;
    }

    // 発行時刻が現在のサーバー時刻より大きい場合、認証は失敗する。
    if(isset($payload['iat']) && $payload['iat'] > time()){。
        return false.
    }

    // このnbf時間に達するまでトークンを受け取らない
    if(isset($payload['nbf']) && $payload['nbf'] > time()){。
        return false;
    }

    // 有効期限が設定されていない、または有効期限が現在のサーバー時刻より短い場合、検証に失敗します。
    if(empty($payload['exp']) || $payload['exp'] < time()){。
        return false.
    }

    return $payload.
}

上記のコードでは、まずJWTをドット(.)上のコードは、まずJWTをドット(...)によってヘッダー、ペイロード、署名セグメントに分割し、ヘッダーとペイロードに対してURLセキュアなBase64デコードとJSONデコードを実行する。署名は最後に署名された鍵に対して検証される。署名が有効で、トークンの有効期限が切れていなければ、Payloadデータが返される。

ステップ6:Base64 URLエンコードとデコード機能

上記の手順で使用されるURLセキュアBase64エンコードおよびデコード関数 base64_urlencode 歌で応える ベース64_urldecode また、定義づけも必要だ:

function base64_urlencode($data) { 以下のようにします。
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

関数base64_urldecode($data) { return
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
画像[4] - WordPressでJWT認証を実装するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress修理のプロフェッショナル、グローバルリーチ、迅速な対応

概要

とおす wpjam_generate_jwt 歌で応える wpjam_verify_jwt この2つの関数は、WordPressで実装できます。 JWT JWTは、ユーザーを認証するための安全でステートレスな方法を提供し、最新のウェブ開発でますます人気が高まっている。


お問い合わせ
記事が読めない?無料でお答えします!個人サイト、中小企業サイトのための無料ヘルプ!
電話:020-2206-9892
QQ咨询:1025174874
Eメール:info@361sale.com
勤務時間: 月~金、9:30~18:30、祝日休み
© 複製に関する声明
この記事を書いた人: Xiesong
終わり
好きなら応援してください。
クドス0 分かち合う
おすすめ
解説 ソファ購入

コメントを投稿するにはログインしてください

    コメントなし