ホームページ  >  記事  >  バックエンド開発  >  JWTを使用してPHP APIインターフェースで認証する方法

JWTを使用してPHP APIインターフェースで認証する方法

PHPz
PHPzオリジナル
2024-01-22 11:28:061209ブラウズ

PHP API接口:如何使用JWT进行身份验证

Web 開発における最も一般的な要件の 1 つはユーザー認証です。安全な認証を実装するために、Web 開発者はさまざまなメカニズムを利用できます。一般的な方法の 1 つは、トークンベースの認証方法を提供する JSON Web Tokens (JWT) です。

この記事では、JWT の基本概念を紹介し、PHP での認証に JWT を使用する方法を示します。簡単なサンプル API を使用して説明します。

  1. JWT とは何ですか?

JWT はオープン スタンダード (RFC 7519) であり、サーバー側で使用するための JSON 形式に基づくトークン プロトコルを定義します。そしてクライアントから。 JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。

ヘッダーには、トークン タイプや署名アルゴリズムなど、トークンに関するメタデータが含まれています。ペイロードには、転送されるデータが含まれます。 JWT の送信は Base64 エンコーディングを介して行われます。署名部分はヘッダーとペイロードのハッシュ値に署名します。

  1. JWT を使用して認証するにはどうすればよいですか?

実際のアプリケーションでは、通常、ユーザーがログインに成功した後に 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!";
}
  1. 概要

この記事では、PHP での認証に JWT を使用する方法について説明します。シンプルな API に基づいて JWT をデモンストレーションし、JWT を生成および検証する方法を詳しく説明しました。

認証に JWT を使用する重要なポイントは、JWT メタデータを正しく設定し、正しい署名アルゴリズムを使用することです。さらに、JWT は常に安全なキーを使用して署名する必要があります。

したがって、アプリケーションを開発するときは、アプリケーションの安全性を確保するために JWT を使用する方法を慎重に検討する必要があります。

以上がJWTを使用してPHP APIインターフェースで認証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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