ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6 での JWT 検証の使用

ThinkPHP6 での JWT 検証の使用

PHPz
PHPzオリジナル
2023-06-20 23:36:093160ブラウズ

インターネットの発展に伴い、Web アプリケーションのユーザー数が徐々に増加し、セキュリティの問題がますます重要になってきています。認証されたユーザーのみがアクセス許可を必要とするリソースにアクセスできるため、認証は Web アプリケーションのセキュリティの重要な部分です。

JSON Web Token (JWT) は軽量で自己完結型の認証トークンであり、Web アプリケーション間で情報を安全に転送するための優れた方法です。 JWT 認証スキームは、分散システムおよびシングルページ アプリケーションに適しています。

ThinkPHP は、安全な Web アプリケーションを開発するための多くのツールを提供する人気のある PHP フレームワークです。この記事では、ThinkPHP6 での認証に JWT を使用してアプリケーションのセキュリティを強化する方法について説明します。

開発環境と依存関係

始める前に、開発環境が正しく設定されていることを確認する必要があります。この記事で使用されている環境と依存関係は次のとおりです。ニーズに応じて変更してください。

  • PHP 7.2 以降
  • ThinkPHP 6.0.0 以降
  • Firebase JWT PHP ライブラリ

ステップ 1 : Firebase をインストールするJWT PHP ライブラリ

Firebase JWT PHP ライブラリのインストールは、JWT 認証スキームを使用する最初のステップです。このライブラリは、JWT の作成、署名、検証に役立ちます。

Composer を使用して Firebase JWT PHP ライブラリをインストールできます。コマンド ラインで次のコマンドを入力します。

composer require firebase/php-jwt

ステップ 2: トークン クラスの作成

JWT の管理と使用を容易にするために、JWT のさまざまな側面を処理する Token という名前のクラスを作成します。検証。このクラスには、トークンの作成、トークンの検証、トークン情報の取得などの機能が含まれます。

app/common ディレクトリに Token.php ファイルを作成し、次のコードを追加します。

<?php

namespace appcommon;

use FirebaseJWTJWT;

class Token
{
    private static $key = 'your_secret_key';
    private static $alg = 'HS256';

    public static function createToken($data, $expiration = 3600)
    {
        $payload = [
            'iss' => 'localhost',
            'sub' => 'token',
            'iat' => time(),
            'exp' => time() + $expiration,
            'data' => $data
        ];

        return JWT::encode($payload, self::$key, self::$alg);
    }

    public static function decodeToken($token)
    {
        return JWT::decode($token, self::$key, [self::$alg]);
    }

    public static function getDataByToken($token)
    {
        $decoded = self::decodeToken($token);

        if (isset($decoded->data)) {
            return $decoded->data;
        } else {
            return false;
        }
    }

    public static function verifyToken($token)
    {
        $result = false;
        try {
            $decoded = self::decodeToken($token);
            $result = true;
        } catch (Exception $e) {
            // Invalid token
        }
        return $result;
    }
}

コードでは、FirebaseJWTJWTencode を使用します。 JWT を作成および解析するための library () メソッドと decode() メソッド。 $key は JWT の署名に使用したキーで、$alg は選択したアルゴリズムです。 createToken() メソッドでは、JWT ペイロードの 4 つのキー (iss、iat、exp、sub) を使用し、カスタム data を追加します。 $expirationパラメータは、JWT の有効期限を指定します。そのため、JWTは有効期間内のみご利用いただけます。

ステップ 3: ミドルウェアでトークンを検証する

JWT 関連の作業を処理する Token クラスを作成したので、ミドルウェアでユーザーの JWT を検証する必要があります。ミドルウェアを使用すると、アプリケーションのコントローラー コードで応答をインターセプトして設定することが簡単になり、コードをさまざまなクラスに分離して管理と変更を改善できます。

app/middleware ディレクトリに Jwt.php ファイルを作成し、次のコードを追加します:

<?php

namespace appmiddleware;

use appcommonToken;
use thinkexceptionHttpResponseException;
use thinkResponse;

class Jwt
{
    public function handle($request, Closure $next)
    {
        if (!$request->header('Authorization')) {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }

        $header = $request->header('Authorization');
        $token = substr($header, 7);
        if (Token::verifyToken($token)) {
            $request->data = Token::getDataByToken($token);
            return $next($request);
        } else {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }
    }
}

このミドルウェアでは、Token クラスで verifyToken()## を使用します # JWTを検証する方法。このメソッドは、トークンが有効かどうかを示す true または false を返します。有効な場合、getDataByToken() メソッドを使用して JWT のデータ部分を取得し、それを $request->data に保存します。このデータはコントローラで利用できるようになります。

ステップ 4: ルーティングの設定

ミドルウェアを作成したので、それを適切なルートに適用する必要があります。

/api/user のルートを保護したいとします。route pi.php ファイルに次のようにルートを設定する必要があります。 <pre class='brush:php;toolbar:false;'>use appmiddlewareJwt; Route::group('api', function() { Route::get('user', 'UserController@getUserInfo')-&gt;middleware(Jwt::class); });</pre> このルートでは、

Jwt

ミドルウェアをパラメータとして middleware() メソッドに渡していることに注意してください。これは、UserControllergetUserInfo() メソッドのサンプル コードです。 <pre class='brush:php;toolbar:false;'>&lt;?php namespace appcontroller; use appcommonToken; class UserController { public function getUserInfo() { $data = request()-&gt;data; ... } ... }</pre>コントローラーでは、

$request->data

を呼び出すことで、認証された JWT に保存されているデータにアクセスできます。 結論

JWT 認証方法を使用すると、Web アプリケーションの安全性と信頼性を高めることができます。この記事では、Firebase JWT PHP ライブラリを使用して ThinkPHP6 で JWT を作成および検証する方法について説明しました。

JWT関連の作業を行うためのTokenというクラスを作成し、JWTの検証やデータの設定を行うミドルウェアを追加しました。最後に、このミドルウェアを使用して JWT に保存されているデータにアクセスするルーティング コードとコントローラー コードを設定します。

JWT 認証を導入する主な目的は、認証されたユーザーのみがアプリケーション内のリソースを使用できるようにすることです。この記事が、JWT 認証を使用してアプリケーションを保護する方法を理解するのに役立つことを願っています。

以上がThinkPHP6 での JWT 検証の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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