JWT (JSON Web Tokens) は、2 つのアプリケーション間で情報を安全に転送するための JSON に基づくオープン標準です。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。ヘッダーにはトークンに関するメタデータが含まれ、ペイロードは実際に情報を保存する部分で、署名はメッセージの整合性を検証するために使用されます。
この記事では、PHP を使用して JWT を実装する方法を検討します。
JWT は Composer を通じてインストールする必要があります。 Composer をインストールしていない場合は、次のコマンドを使用してインストールできます:
curl -sS https://getcomposer.org/installer | php
次に、Composer 実行可能ファイルを /usr/local/bin ディレクトリに移動します:
sudo mv composer.phar /usr/local/bin/composer
依存関係をインストールします:
composer require firebase/php-jwt
まず、PHP の jwt_encode()
関数を使用してトークンを作成する必要があります。以下に例を示します。
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $payload = array( "iss" => "localhost", "aud" => "localhost", "iat" => time(), "exp" => time()+60*60 //有效期1小时 ); $jwt = JWT::encode($payload, $key);
上の例では、jwt_encode()
関数を使用して JWT を作成します。 $key
変数には JWT キーが含まれ、$payload
変数には送信される情報と有効期限が含まれます。有効期限は、PHP の time()
関数を使用して取得できます。最後に、jwt_encode()
関数は JWT 文字列を返します。
JWT を検証するには、PHP の jwt_decode()
関数を使用する必要があります。以下に例を示します。
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); print_r($decoded); } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
上の例では、jwt_decode()
関数を使用して JWT を検証しました。検証が成功すると、関数は JWT 情報を含むオブジェクトを返します。
署名は、JWT の整合性を検証するために使用されます。署名検証メカニズムだけが知っているキーを使用してメッセージに署名する必要があります。受信者はメッセージを受信すると、同じキーを使用してメッセージを復号化し、検証します。
JWT は、「ハッシュ メッセージ認証コード」(HMAC) と呼ばれるテクノロジーを使用して JWT に署名します。このテクノロジーでは、JWT ヘッダーとペイロードをハッシュし、それらをキーと組み合わせる必要があります。次に署名検証の例を示します。
use \Firebase\JWT\JWT; $key = "my_secret_key"; //密钥 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw"; try { $decoded = JWT::decode($jwt, $key, array('HS256')); $decoded_array = (array) $decoded; $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key); if ($signature_valid) { echo "Valid signature"; } else { echo "Invalid signature"; } } catch (Exception $e) { echo 'Invalid token: ' . $e->getMessage(); }
上の例では、verify()
関数を使用して署名を検証しました。この関数はブール値を返します。結果が true の場合、署名が有効であることを意味します。
概要
この記事では、PHP を使用して JWT を実装する方法を簡単に紹介しました。まず、JWT 依存ライブラリをインストールし、次に jwt_encode()
関数を使用してトークンを作成し、jwt_decode()
関数を使用してトークンを検証し、最後にverify()
署名を検証する関数。これらの機能は、Firebase の JWT ライブラリを通じて実装できます。
以上がPHPを使用してJWTを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。