ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してJWTを実装する方法

PHPを使用してJWTを実装する方法

PHPz
PHPzオリジナル
2023-04-24 10:50:102702ブラウズ

JWT (JSON Web Tokens) は、2 つのアプリケーション間で情報を安全に転送するための JSON に基づくオープン標準です。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。ヘッダーにはトークンに関するメタデータが含まれ、ペイロードは実際に情報を保存する部分で、署名はメッセージの整合性を検証するために使用されます。

この記事では、PHP を使用して JWT を実装する方法を検討します。

  1. インストールの依存関係

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
  1. トークンの作成

まず、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 文字列を返します。

  1. トークンの検証

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 情報を含むオブジェクトを返します。

  1. 署名の検証

署名は、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。