ホームページ >バックエンド開発 >PHPチュートリアル >PHP での ID 認証に JWT を使用する方法について話しましょう

PHP での ID 認証に JWT を使用する方法について話しましょう

PHPz
PHPzオリジナル
2023-03-31 09:10:171215ブラウズ

JWT (JSON Web Token) は、認証と認可のオープン標準です。 JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。 JWT を使用する場合、サーバーは JWT をクライアントに送信し、クライアントは後続のリクエストで JWT を実行し、サーバーは JWT の署名と有効期間を検証することでリクエストの正当性を確認します。

PHP は一般的に使用される Web 開発言語であり、多くの JWT 実装メソッドを提供します。ここでは、PHP で ID 認証に JWT を使用する方法を紹介します。

  1. JWT のインストール

JWT を使用する前に、PHP JWT パッケージをインストールする必要があります。次のコマンドを使用してインストールできます:

composer require firebase/php-jwt

インストールが完了したら、プロジェクトに JWT を導入できます:

require_once('vendor/autoload.php');
use Firebase\JWT\JWT;
  1. Generate JWT

ID 認証の場合 このとき、サーバーは JWT を生成してクライアントに送信する必要があります。 JWT の生成プロセスには、ヘッダー、ペイロード、署名の生成が含まれます。

// 将需要编码的数据放到一个关联数组中
$payload = array(
    "user_id" => 123456,
);

// 生成Header
$header = array(
    "alg" => "HS256",  // 采用的加密算法
    "typ" => "JWT"
);

// 生成JWT
$jwt = JWT::encode($payload, SECRET_KEY, 'HS256');
// SECRET_KEY为加密密钥

JWT を生成したら、それをクライアントに送信するだけです。

  1. JWT の検証

クライアントからの後続のリクエストでは、JWT を運ぶ必要があり、サーバー検証を通じてリクエストの正当性を確認する必要があります。サーバーが JWT を検証するプロセスには、ヘッダー、ペイロード、署名の 3 つの部分をデコードし、署名が正しいかどうか、有効期限が切れているかどうかを検証することが含まれます。

// 解码JWT
$jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));

// 验证Signature和有效期
$jwt_verified = JWT::verify($jwt, SECRET_KEY, array('HS256'));

署名と有効期間の両方が検証に合格した場合、リクエストの処理を続行できます。検証に合格しない場合は、リクエストを拒否する必要があります。

  1. JWT の有効期限の処理

JWT には有効期間があり、有効期間中は複数のリクエストに使用できます。有効期限が切れた後、クライアントは JWT を再取得し、リクエストに含める必要があります。 JWT を処理するときは、その有効期間を確認する必要があります。

try {
    // 解码JWT
    $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));
    // 检查有效期
    if ($jwt_decoded->exp < time()) {
        // JWT已过期
        throw new Exception('JWT已过期');
    }
} catch (Exception $e) {
    // JWT无效或已过期
    // 需要重新获取JWT或返回错误
}
  1. 概要

認証に JWT を使用することは、シンプルで効果的な方法です。 PHP には多くの JWT 実装が用意されているため、PHP での JWT の使用が非常に簡単になります。ただし、JWT の有効期間とその正しいデコードと検証に注意する必要があります。以上がPHPを使用してJWT認証を実装する手順と注意事項です。

以上がPHP での ID 認証に JWT を使用する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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