![画像[1] - WordPressでJWT認証を実装するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速対応](https://www.361sale.com/wp-content/uploads/2024/07/2024072307462094.png)
JWT(JSON Web Token)とは、軽量で自己完結型の認証・認可用トークンのことで、ユーザー情報(ユーザーID、ロール、権限など)をJSONオブジェクトにエンコードし、デジタル署名することで署名付きトークンを生成します。この記事では、JWTの概念と構造を詳しく紹介し、WordPressでJWTの生成と検証を実装する方法を説明します。
JWTとは何か?
JWTは、ステートレスRESTful API認証に一般的に使用されるセキュリティ・メカニズムである。渡されたトークンをサーバーが検証することで、ユーザーの身元が確かであることを保証します。JWTはクライアントとサーバー間で送信される際に暗号化されるため、情報が改ざんされるのを防ぐことができる。
JWTの構造
![画像[2] - WordPressにJWT認証を導入するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速対応](https://www.361sale.com/wp-content/uploads/2024/07/2024072307543861.png)
JWTはヘッダー、ペイロード、シグネチャの3つの部分から構成され、以下のようにドット(.))で結ばれ、以下のように完全なJWTを形成する:
ヘッダー.ペイロード.シグネチャー
- ヘッダー
ヘッダーは2つの属性を含むJSONオブジェクトである:アルグ
(署名アルゴリズム)と タイプ
(一般的な署名アルゴリズムはHS256、RS256など)。一般的な署名アルゴリズムはHS256、RS256などです。ヘッダーはBase64Urlでエンコードされ、以下の文字列が生成されます:
{
"alg": "HS256"、
"typ": "JWT"
}
- ペイロード
ペイロードは、ユーザー情報やその他のビジネスデータを含むJSONオブジェクトでもある。この宣言は、定義済み(例えば iss
そして経験値
そしてサブ
また、ペイロードはBase64Urlエンコードされ、以下の文字列を生成する:
{
"sub": "1234567890"、
"name": "John Doe".
"iat": 1516239022
}
定義済みのフィールドは以下の通り:
iss
(発行者):発行した人サブ
件名監査
観客経験値
(有効期限):有効期限エヌビーエフ
(発効前):発効時期アイアット
(発行時期ジェティ
(JWT ID): 固有識別子
- 署名
署名は、JWTの完全性とセキュリティを保証するために使用される。ヘッダー、ペイロード、そして鍵(シークレット)を署名アルゴリズムで暗号化する。以下に例を示す:
HMACSHA256(
base64UrlEncode(header) + ".". +
base64UrlEncode(ペイロード)、
シークレット
)
生成された署名はJWTの最後に付加され、完全なJWTを形成する:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
WordPressにJWTを実装する
WordPressでJSON Web Token (JWT)認証を実装するには、以下の手順が必要です:
ステップ1:JWT認証プラグインをインストールする
- WordPressの管理画面にログインします。
- に移動します。 プラグイン > 新しいプラグインのインストール.
- 探す WP REST APIのJWT認証.
- プラグインをインストールして有効化します。
![画像[3] - WordPressでJWT認証を実装するための完全ガイドを徹底分析 - Photon Volatility Network|WordPress 修理サービスのプロフェッショナル、グローバルリーチ、迅速な対応](https://www.361sale.com/wp-content/uploads/2024/07/2024072307590722.png)
ステップ2:プラグインの設定
- プラグインを有効化した後、「設定」>「プラグイン設定」に移動します。 JWT認証.
- 設定ページでは、以下のオプションを設定する必要があります:
- シークレット・キーこれはJWTに署名するためのキーです。キーは
wp-config.php
次のコードをファイルに追加してキーを設定する:define('JWT_AUTH_SECRET_KEY', 'your-secret-key');
- CORSを有効にするクロスドメインリクエストが必要な場合は、このオプションを有効にします。
- シークレット・キーこれはJWTに署名するためのキーです。キーは
ステップ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修理のプロフェッショナル、グローバルリーチ、迅速な対応](https://www.361sale.com/wp-content/uploads/2024/06/2024061301281171.png)
概要
とおす wpjam_generate_jwt
歌で応える wpjam_verify_jwt
この2つの関数は、WordPressで実装できます。 JWT JWTは、ユーザーを認証するための安全でステートレスな方法を提供し、最新のウェブ開発でますます人気が高まっている。
お問い合わせ |
---|
記事が読めない?無料でお答えします!個人サイト、中小企業サイトのための無料ヘルプ! |
① 電話:020-2206-9892 |
② QQ咨询:1025174874 |
三 Eメール:info@361sale.com |
④ 勤務時間: 月~金、9:30~18:30、祝日休み |
この記事へのリンクhttps://www.361sale.com/ja/14448
この記事は著作権で保護されており、必ず帰属表示を付けて複製してください。
コメントなし