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

ThinkPHP6 での JWT 検証の使用

Jun 20, 2023 pm 11:36 PM
thinkphp プログラミング jwt検証

インターネットの発展に伴い、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 ファイルに次のようにルートを設定する必要があります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>use appmiddlewareJwt; Route::group('api', function() { Route::get('user', 'UserController@getUserInfo')-&gt;middleware(Jwt::class); });</pre><div class="contentsignin">ログイン後にコピー</div></div> このルートでは、

Jwt

ミドルウェアをパラメータとして middleware() メソッドに渡していることに注意してください。これは、UserControllergetUserInfo() メソッドのサンプル コードです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&lt;?php namespace appcontroller; use appcommonToken; class UserController { public function getUserInfo() { $data = request()-&gt;data; ... } ... }</pre><div class="contentsignin">ログイン後にコピー</div></div>コントローラーでは、$request->data<p> を呼び出すことで、認証された JWT に保存されているデータにアクセスできます。 <code>結論

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

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

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

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

正規表現を使用してPHP配列から重複した値を削除します 正規表現を使用してPHP配列から重複した値を削除します Apr 26, 2024 pm 04:33 PM

正規表現を使用して PHP 配列から重複値を削除する方法: 正規表現 /(.*)(.+)/i を使用して、重複値を照合して置換します。配列要素を反復処理し、preg_match を使用して一致をチェックします。一致する場合は値をスキップし、一致しない場合は重複値のない新しい配列に追加します。

プログラミングは何のためにあるのか、それを学ぶと何の役に立つのか? プログラミングは何のためにあるのか、それを学ぶと何の役に立つのか? Apr 28, 2024 pm 01:34 PM

1. プログラミングは、Web サイト、モバイル アプリケーション、ゲーム、データ分析ツールなど、さまざまなソフトウェアやアプリケーションの開発に使用できます。その応用分野は非常に幅広く、科学研究、医療、金融、教育、エンターテイメントなど、ほぼすべての業界をカバーしています。 2. プログラミングを学ぶことは、問題解決スキルと論理的思考スキルを向上させるのに役立ちます。プログラミング中、問題を分析して理解し、解決策を見つけてコードに変換する必要があります。この考え方は、分析能力と抽象能力を養い、実際的な問題を解決する能力を向上させることができます。

コーディングの鍵: 初心者のための Python の力を解き放つ コーディングの鍵: 初心者のための Python の力を解き放つ Oct 11, 2024 pm 12:17 PM

Python は、学習の容易さと強力な機能により、初心者にとって理想的なプログラミング入門言語です。その基本は次のとおりです。 変数: データ (数値、文字列、リストなど) を保存するために使用されます。データ型: 変数内のデータの型 (整数、浮動小数点など) を定義します。演算子: 数学的な演算と比較に使用されます。制御フロー: コード実行のフロー (条件文、ループ) を制御します。

Java をシンプルに: プログラミング能力を高める初心者向けガイド Java をシンプルに: プログラミング能力を高める初心者向けガイド Oct 11, 2024 pm 06:30 PM

Java をシンプルに: プログラミング能力の初心者向けガイド はじめに Java は、モバイル アプリケーションからエンタープライズ レベルのシステムに至るまで、あらゆるもので使用される強力なプログラミング言語です。初心者にとって、Java の構文はシンプルで理解しやすいため、プログラミングの学習に最適です。基本構文 Java は、クラスベースのオブジェクト指向プログラミング パラダイムを使用します。クラスは、関連するデータと動作をまとめて編成するテンプレートです。簡単な Java クラスの例を次に示します。 publicclassperson{privateStringname;privateintage;

Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Python による問題解決: 初心者プログラマーとして強力なソリューションをアンロックする Oct 11, 2024 pm 08:58 PM

Python は、問題解決の初心者に力を与えます。ユーザーフレンドリーな構文、広範なライブラリ、変数、条件文、ループによる効率的なコード開発などの機能を備えています。データの管理からプログラム フローの制御、反復的なタスクの実行まで、Python が提供します

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

C の謎を解く: 新人プログラマーのための明確でシンプルな道 C の謎を解く: 新人プログラマーのための明確でシンプルな道 Oct 11, 2024 pm 10:47 PM

C は、初心者がシステム プログラミングを学習するのに最適な選択肢です。ヘッダー ファイル、関数、メイン関数のコンポーネントが含まれています。 「HelloWorld」を印刷できる単純な C プログラムには、標準入出力関数宣言を含むヘッダー ファイルが必要で、main 関数で printf 関数を使用して印刷します。 C プログラムは、GCC コンパイラーを使用してコンパイルして実行できます。基本をマスターしたら、データ型、関数、配列、ファイル処理などのトピックに進み、熟練した C プログラマーになることができます。

エラー処理には golang のエラー ラップおよびアンワインド メカニズムを使用する エラー処理には golang のエラー ラップおよびアンワインド メカニズムを使用する Apr 25, 2024 am 08:15 AM

Go のエラー処理には、ラップ エラーとアンラップ エラーが含まれます。エラーをラップすると、あるエラー タイプを別のエラー タイプでラップできるようになり、エラーのより豊富なコンテキストが提供されます。エラーを展開し、ネストされたエラー チェーンをたどって、デバッグを容易にするために最下位レベルのエラーを見つけます。これら 2 つのテクノロジを組み合わせることで、エラー状態を効果的に処理でき、より豊富なエラー コンテキストと優れたデバッグ機能が提供されます。

See all articles