Web 開発における最も一般的な要件の 1 つはユーザー認証です。安全な認証を実装するために、Web 開発者はさまざまなメカニズムを利用できます。一般的な方法の 1 つは、トークンベースの認証方法を提供する JSON Web Tokens (JWT) です。
この記事では、JWT の基本概念を紹介し、PHP での認証に JWT を使用する方法を示します。簡単なサンプル API を使用して説明します。
JWT はオープン スタンダード (RFC 7519) であり、サーバー側で使用するための JSON 形式に基づくトークン プロトコルを定義します。そしてクライアントから。 JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。
ヘッダーには、トークン タイプや署名アルゴリズムなど、トークンに関するメタデータが含まれています。ペイロードには、転送されるデータが含まれます。 JWT の送信は Base64 エンコーディングを介して行われます。署名部分はヘッダーとペイロードのハッシュ値に署名します。
実際のアプリケーションでは、通常、ユーザーがログインに成功した後に JWT を生成し、それをクライアントに送り返します。クライアントは保護された API にアクセスするたびに、認証情報として JWT をサーバーに送信する必要があります。サーバーは JWT の有効性を検証し、それに基づいてユーザーを認証できます。
PHP での認証に JWT を使用する方法を示してみましょう。この例では、JWT を検証するための単純な API を作成します。 API は GET リクエストを受け入れ、JWT をクエリ パラメータとして渡します。
まず、php-jwt ライブラリをインストールする必要があります。 Composer を使用してインポートを完了できます:
composer require firebase/php-jwt
次に、ペイロード データを JWT に変換して署名する関数を作成する必要があります:
function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); }
この関数では、いくつかの設定を行います。 「iss」(発行者)、「aud」(受信者)、「iat」(発行時刻)、「exp」(有効期限)などの基本的なメタデータ。また、JWT のデータ セクションにユーザー データを追加します。最後に、PHP-JWT ライブラリの encode メソッドを使用し、署名キーとして「secret_key」を使用して JWT に署名します。
次に、受信した JWT が有効かどうかを確認する検証関数を作成する必要があります:
function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } }
この関数では、PHP-JWT ライブラリの decode メソッドを使用して JWT をデコードします。検証に同じキーを使用します。 JWT 検証に合格した場合は true を返し、そうでない場合は false を返します。
最後に、GET リクエストを受信して JWT を確認するためのエントリ スクリプトを作成する必要があります。
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
このスクリプトでは、まず GET リクエストのパラメータから JWT を取得し、次に呼び出します。 JWT が有効であることを確認するための validateToken 関数。 JWT が有効な場合は、JWT をデコードして、そこから保存されているユーザー情報を抽出し、ユーザーを歓迎します。それ以外の場合は、「無効なトークン!」が出力されます。
完全なコードは次のとおりです。
require_once 'vendor/autoload.php'; use FirebaseJWTJWT; function generateToken($payload) { $key = "secret_key"; $token = array( "iss" => "http://example.org", "aud" => "http://example.com", "iat" => time(), "exp" => time() + (60*60), "data" => $payload ); return JWT::encode($token, $key); } function validateToken($jwt) { $key = "secret_key"; try { $data = JWT::decode($jwt, $key, array('HS256')); return true; } catch (Exception $e) { return false; } } $jwt = $_GET['jwt']; if (validateToken($jwt)) { $data = JWT::decode($jwt, "secret_key", array('HS256')); echo "Welcome " . $data->data->username . "!"; } else { echo "Invalid token!"; }
この記事では、PHP での認証に JWT を使用する方法について説明します。シンプルな API に基づいて JWT をデモンストレーションし、JWT を生成および検証する方法を詳しく説明しました。
認証に JWT を使用する重要なポイントは、JWT メタデータを正しく設定し、正しい署名アルゴリズムを使用することです。さらに、JWT は常に安全なキーを使用して署名する必要があります。
したがって、アプリケーションを開発するときは、アプリケーションの安全性を確保するために JWT を使用する方法を慎重に検討する必要があります。
以上がJWTを使用してPHP APIインターフェースで認証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。