国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
、
まず、システムにPHPと作曲家をインストールする必要があります。
PHPのJWT認(rèn)証とは何ですか?
PHPのJWTの代替案は何ですか?
ホームページ バックエンド開(kāi)発 PHPチュートリアル JWT(JSON Web Tokens)によるPHP認(rèn)証

JWT(JSON Web Tokens)によるPHP認(rèn)証

Feb 08, 2025 am 09:57 AM

PHP Authorization with JWT (JSON Web Tokens)

アプリケーション認(rèn)証は、ユーザー名/メールボックスやパスワードなどの資格情報(bào)のみに依存するために使用され、セッションはユーザーがログアウトするまでユーザーのステータスを維持するために使用されました。その後、認(rèn)証APIの使用を開(kāi)始しました。最近、JSON Web Tokens(JWT)がサーバーリクエストの認(rèn)証にますます使用されています。

この記事では、JWTとは何か、JWTベースのユーザーリクエスト認(rèn)証にPHPを使用する方法を紹介します。

キーポイント

  1. 認(rèn)証方法の進(jìn)化:この記事では、従來(lái)のセッションからJSON Web Tokens(JWT)の使用まで、ユーザー認(rèn)証方法の進(jìn)化の概要を示しています。セッション管理が行われます。
  2. JWTの利點(diǎn)とアプリケーション:
  3. この記事では、情報(bào)やメタデータを保存する能力、OAUTH2との互換性、期限切れのコントロールの提供など、他の認(rèn)証方法よりもJWTの利點(diǎn)を説明し、説明します。 JWTがユーザー認(rèn)証プロセスのセキュリティと柔軟性を高める方法。 PHPの実用的なアプリケーション:この記事では、JWTの生成、使用、検証をカバーするPHPベースのアプリケーションにJWTを?qū)g裝するための包括的なガイドを提供します。これには、詳細(xì)なコードの例と説明が含まれ、読者にJWTベースの認(rèn)証を獨(dú)自のWebプロジェクトに統(tǒng)合するための明確なロードマップを提供します。
  4. jwtおよびセッション

まず第一に、なぜ會(huì)話がそれほど良くないのですか?主な理由は3つあります データは、単純なテキストでサーバーに保存されます。データが通常パブリックフォルダーに保存されていなくても、十分なサーバーアクセスを持つ人なら誰(shuí)でもセッションファイルのコンテンツを読み取ることができます。

ファイルシステムの読み取り/書(shū)き込みリクエストが含まれます。セッションが開(kāi)始されるか、そのデータが変更されるたびに、サーバーはセッションファイルを更新する必要があります。アプリがセッションクッキーを送信するたびに同じことが言えます。ユーザーの數(shù)が多い場(chǎng)合、MemcachedやRedisなどの代替セッションストレージオプションを使用しない限り、サーバーが遅くなる可能性があります。

    分散/クラスター化アプリケーション。セッションファイルはデフォルトでファイルシステムに保存されるため、利用可能な高度に利用可能なアプリケーション(ロードバランサーやクラスター化されたサーバーなどのテクノロジーが必要)のために、分散またはクラスター化されたインフラストラクチャを構(gòu)築することは困難です。他のストレージメディアと特別な構(gòu)成を?qū)g裝する必要があり、その意味を完全に理解する必要があります。
  • jwt
さあ、JWTの學(xué)習(xí)を始めましょう。 JSON Webトークン仕様(RFC 7519)は、2010年12月28日に初めてリリースされ、最新のアップデートは2015年5月でした。

JWTには、以下を含むAPIキーよりも多くの利點(diǎn)があります

  • APIキーはランダムな文字列であり、JWTには情報(bào)とメタデータが含まれています。この情報(bào)とメタデータは、ユーザーのID、承認(rèn)データ、およびドメインに対するトークンの有効性など、さまざまなコンテンツを説明する場(chǎng)合があります。
  • JWTは、集中的な発行または取り消し機(jī)関を必要としません。
  • JWTはOAUTH2と互換性があります。
  • JWTデータを確認(rèn)できます。
  • JWTは制御の有効期限が切れています。
  • JWTは、HTTP認(rèn)証ヘッダーなど、スペースが制約した環(huán)境に適しています。
  • データはJavaScriptオブジェクト表記(JSON)形式で転送されます。
  • JWTは、base64urlエンコードを使用して表されます。

jwtはどのように見(jiàn)えますか?

これはJWTの例です

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
一見(jiàn)すると、この文字列は、ピリオドまたはドット文字に接続されたキャラクターのランダムなグループのようです。したがって、APIキーと違いはないようです。ただし、よく見(jiàn)ると、3つの文字列があることがわかります。

jwtヘッダー

最初の文字列はJWTヘッダーです。 Base64 URLエンコードJSON文字列です。これは、常にJWTに設(shè)定されている署名とトークンのタイプを生成するために使用される暗號(hào)化アルゴリズムを指定します。アルゴリズムは、または非対稱にすることができます。 対稱アルゴリズムは、単一のキーを使用してトークンを作成および検証します。このキーは、JWTの作成者と消費(fèi)者の間で共有されます。作成者と消費(fèi)者のみがキーを知っていることを確認(rèn)してください。それ以外の場(chǎng)合、誰(shuí)でも有効なトークンを作成できます。

非対稱アルゴリズムは、秘密鍵を使用してトークンに署名し、公開(kāi)キーを使用してトークンを確認(rèn)します。これらのアルゴリズムは、共有キーが非現(xiàn)実的である場(chǎng)合、または他の當(dāng)事者がトークンの完全性を検証するだけである場(chǎng)合に使用する必要があります。 JWTのペイロード

2番目の文字列はJWTのペイロードです。また、Base64 URLエンコードJSON文字列でもあります。 「宣言」と呼ばれるいくつかの標(biāo)準(zhǔn)フィールドが含まれています。宣言には3種類のタイプがあります:

登録

、

public

private。 登録明細(xì)書(shū)は事前に定義されています。 JWTのRFCでそれらのリストを見(jiàn)つけることができます。一般的に使用されるステートメントをいくつか紹介します:

IAT:トークンによって発行された日付とタイムスタンプ。

キー:トークンの検証に使用できる一意の文字列ですが、これは集中化されていない発行者機(jī)関に反します。
  • ISS:発行者の名前または識(shí)別子を含む文字列。他のアプリケーションからトークンを破棄するために使用できるドメイン名にすることができます。
  • NBF:トークンは有効な日付とタイムスタンプと見(jiàn)なされるようになります。 IAT以上である必要があります。
  • exp:トークンが有効に停止する日付とタイムスタンプ。 IATおよびNBFより大きくする必要があります。
  • 必要に応じて公開(kāi)宣言を定義できます。ただし、登録された聲明や既に存在する公式聲明と同じではありません。好きなようにプライベートステートメントを作成できます。彼らは両方の當(dāng)事者のみです:生産者と消費(fèi)者。
  • jwtの署名

JWTの署名は、トークンのコンテンツに固有のデジタル署名を使用してJWTのデータを保護(hù)するように設(shè)計(jì)された暗號(hào)化メカニズムです。署名により、JWTの完全性が保証され、ユーザーが悪意のある俳優(yōu)によって改ざんされていないことを確認(rèn)できます。

JWTの署名は、3つのことの組み合わせです
  • jwtのヘッダー
  • JWTのペイロード
  • 秘密の値

これら3つは、JWTヘッダー(非暗號(hào)化されていない)で指定されたアルゴリズムを使用してデジタル署名されています。上記の例をデコードすると、次のJSON文字列が取得されます。

jwtのヘッダー

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
JWTのデータ

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
自分でjwt.io自分で試すことができます。ここでは、自分のjwtをエンコードしてデコードすることができます。

PHPベースのアプリケーションでJWTを使用してください

JWTが何であるかを?qū)Wんだので、PHPアプリケーションでそれらを使用する方法を?qū)Wぶ時(shí)が來(lái)ました。この記事を掘り下げる前に、この記事のコードを自由にクローンするか、手順に従ってください。

JWTを統(tǒng)合するために多くの方法をとることができますが、ここに私たちが取るものがあります。

ログインページとログアウトページとは別に、アプリケーションへのすべての要求をJWTを介して認(rèn)証する必要があります。ユーザーがJWTなしでリクエストを行うと、ログインページにリダイレクトされます。

ユーザーがログインフォームに記入して提出した後、フォームはjavaScriptを介してアプリケーションのログインエンドポイントAuthenticate.phpに送信されます。エンドポイントは、リクエストから資格情報(bào)(ユーザー名とパスワード)を引き出し、有効であることをチェックします。

有効な場(chǎng)合、JWTを生成してクライアントに送り返します。クライアントがJWTを受信すると、JWTを保存し、將來(lái)のリクエストごとにアプリケーションに使用します。

単純なシナリオの場(chǎng)合、ユーザーは1つのリソースのみを要求できます。それはあまり役に立たず、リクエスト時(shí)に現(xiàn)在のタイムスタンプを含む文字列を返すだけです。

リクエストを行うときにJWTを使用する方法はいくつかあります。當(dāng)社のアプリケーションでは、JWTはBearer Authorization Headerに送信されます。

Bearer Authorizationに慣れていない場(chǎng)合、これはリクエストヘッダーでトークン(JWTなど)が送信されるHTTP認(rèn)証の形式です。サーバーはトークンをチェックし、トークンへの「ホルダー」アクセスを許可するかどうかを判斷できます。

これはヘッダーの例です:

<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>
アプリケーションが受信するすべてのリクエストについて、PHPはベアラーヘッダーからトークンを抽出しようとします。それが存在する場(chǎng)合、それは検証されます。有効な場(chǎng)合、ユーザーはリクエストに対する通常の応答が表示されます。ただし、JWTが無(wú)効である場(chǎng)合、ユーザーはリソースにアクセスすることができません。

JWT

は、セッションCookieを置き換えることを意図していないことに注意してください。 前提條件

まず、システムにPHPと作曲家をインストールする必要があります。

プロジェクトのルートディレクトリで、Composerインストールを?qū)g行します。これにより、JWT操作を簡(jiǎn)素化するサードパーティライブラリであるFirebase Php-JWTと、アプリケーションの構(gòu)成データへのアクセスを簡(jiǎn)素化するためにLaminas-Configが導(dǎo)入されます。

ログインフォーム

寫(xiě)真

ライブラリをインストールした後、Authenticate.phpでログインコードを徐々に記入しましょう。最初に、作曲家によって生成されたオートローダーが利用可能であることを確認(rèn)するために、通常のセットアップを作成します。

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
フォームの提出を受信した後、資格情報(bào)はデータベースまたは他のデータストアに対して検証されます。この例の目的のために、それらが有効であると仮定し、$ hasvalidcredentialssをtrueに設(shè)定します。

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
次に、変數(shù)のセットを初期化してJWTを生成します。 JWTをクライアントに確認(rèn)できるため、機(jī)密情報(bào)を含めないでください。

指摘する価値のあるもう1つのことは、$ SecretKeyがこのように初期化されていないことです。環(huán)境に設(shè)定して抽出したり、PhpDotenvなどのライブラリを使用したり、構(gòu)成ファイルに設(shè)定したりする場(chǎng)合があります。この場(chǎng)合、JWTコードに集中したいので、これを行うことは避けています。

漏れたり、バージョン制御の下に保管したりしないでください!

ペイロードデータを準(zhǔn)備した後、次にPHP-JWTの靜的エンコードメソッドを使用してJWTを作成します。

<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>
この方法:

配列をjson

に変換します
    ヘッダーを生成
  • ペイロードに署名
  • 最終文字列のエンコード
  • 3つのパラメーターを受け入れます:

ペイロード情報(bào)

    key
  • トークンに署名するためのアルゴリズム
  • 関數(shù)の結(jié)果でエコーを呼び出すことにより、生成されたトークンを返します:
jwt

を使用しています

<code>Authorization: Bearer ab0dde18155a43ee83edba4a4542b973</code>
寫(xiě)真

クライアントがトークンを持っているので、JavaScriptまたは好きなメカニズムを使用して保存できます。ネイティブJavaScriptを使用して操作する方法の例を次に示します。 index.htmlでは、フォームが正常に送信された後、受信したJWTがメモリに保存され、ログインフォームが非表示になり、タイムスタンプが表示されるボタンが表示されます。 jwt

を使用しています

[現(xiàn)在のタイムスタンプの取得]ボタンをクリックすると、承認(rèn)ヘッダーの認(rèn)証後に受け取ったJWTを設(shè)定するResource.phpにgetリクエストが発行されます。

<?php
declare(strict_types=1);

use Firebase\JWT\JWT;

require_once('../vendor/autoload.php');

ボタンをクリックすると、次のようなリクエストが発行されます。

JWTが有効であると仮定すると、リソースが表示され、その後、コンソールに応答が記述されます。

jwt
<?php
// 從請(qǐng)求中提取憑據(jù)

if ($hasValidCredentials) {
を確認(rèn)します

最後に、PHPでトークンを検証する方法を見(jiàn)てみましょう。いつものように、作曲家のオートローダーを含めます。その後、正しいリクエスト方法が使用されているかどうかを確認(rèn)できます。 JWT固有のコードに焦點(diǎn)を合わせ続けるために、これを行うコードをスキップしました。

$secretKey  = 'bGS6lzFqvvSQ8ALbOxatm7/Vk7mLQyzqaS34Q4oR1ew=';
$issuedAt   = new DateTimeImmutable();
$expire     = $issuedAt->modify('+6 minutes')->getTimestamp();      // 添加60秒
$serverName = "your.domain.name";
$username   = "username";                                           // 從過(guò)濾后的POST數(shù)據(jù)中檢索

$data = [
    'iat'  => $issuedAt->getTimestamp(),         // 頒發(fā)時(shí)間:生成令牌的時(shí)間
    'iss'  => $serverName,                       // 頒發(fā)者
    'nbf'  => $issuedAt->getTimestamp(),         // 不早于
    'exp'  => $expire,                           // 過(guò)期
    'userName' => $username,                     // 用戶名
];
コードは、ベアラーヘッダーからトークンを抽出しようとします。 preg_matchを使用してこれを行いました。関數(shù)に慣れていない場(chǎng)合、文字列上で正規(guī)表現(xiàn)マッチングを?qū)g行します。

ここで使用している正規(guī)表現(xiàn)は、ベアラーヘッダーからトークンを抽出し、他のすべてをダンプしようとします。見(jiàn)つからない場(chǎng)合は、HTTP 400エラー要求が返されます:

デフォルトでは、ApacheはHTTP_AuthorizationヘッダーをPHPに渡さないことに注意してください。その背後にある理由は、

です
<?php     // 將數(shù)組編碼為JWT字符串。
    echo JWT::encode(
        $data,
        $secretKey,
        'HS512'
    );
}

基本的な認(rèn)証ヘッダーは、接続がHTTPSで完了した場(chǎng)合にのみ安全です。そうしないと、エンコードされたプレーンテキスト(暗號(hào)化されていない)のネットワークを介してクレデンシャルが送信されるためです。これは大きなセキュリティの問(wèn)題です。

この決定の論理を完全に理解しています。ただし、多くの混亂を避けるために、Apache構(gòu)成に次のことを追加します。その後、コードは予想どおりに機(jī)能します。 nginxを使用している場(chǎng)合、コードは予想どおりに機(jī)能する必要があります:

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>

次に、$ MATCES変數(shù)の2番目の要素になる一致するJWTを抽出しようとします。利用できない場(chǎng)合は、JWTが抽出されず、HTTP 400エラーリクエストが返されます。

<code>{
    "alg": "HS256",
    "typ": "JWT"
}</code>
このポイントに到達(dá)すると、JWTが抽出されているため、デコードと検証フェーズに進(jìn)みます。これを行うには、環(huán)境またはアプリケーションの構(gòu)成から抽出されるキーが再度必要です。次に、PHP-JWTの靜的デコード法を使用して、JWTのデコードに使用されるキーと一連のアルゴリズムであるJWTに渡します。

それが正常にデコードされる可能性がある場(chǎng)合、それを検証しようとします。ここでの私の例は、発行者のみを使用しているため、タイムスタンプよりも早く、期限切れになっているため、非常に簡(jiǎn)単です。実際のアプリケーションでは、他の多くのステートメントを使用することもできます。

トークンの有効期限が切れているように、トークンが無(wú)効である場(chǎng)合、ユーザーはHTTP 401不正ヘッダーを受け取り、スクリプトが終了します。

デコードと検証プロセスが失敗した場(chǎng)合、
<code>{
    "iat": 1416929109,
    "jti": "aa7f8d0a95c",
    "scopes": [
        "repo",
        "public_repo"
    ]
}</code>

提供されるセグメントの數(shù)は、上記の標(biāo)準(zhǔn)の3つのセグメントと一致しません。

ヘッダーまたはペイロードは有効なJSON文字列ではありません。
  • 署名は無(wú)効です。つまり、データは改ざんされています!
  • NBF宣言はJWTで設(shè)定されており、そのタイムスタンプは現(xiàn)在のタイムスタンプよりも小さいです。
  • IAT宣言はJWTで設(shè)定されており、そのタイムスタンプは現(xiàn)在のタイムスタンプよりも小さいです。
  • Exp宣言はJWTで設(shè)定されており、そのタイムスタンプは現(xiàn)在のタイムスタンプよりも大きい。
  • ご覧のとおり、JWTには、有効なトークンのリストを手動(dòng)で取り消したりチェックしたりすることなく、無(wú)効としてマークできるコントロールの素晴らしいセットがあります。
  • デコードと検証プロセスが成功した場(chǎng)合、ユーザーはリクエストを発行することが許可され、対応する応答が表示されます。

概要

これは、JSON Webトークン(またはJWT)の簡(jiǎn)単な紹介と、PHPベースのアプリケーションでそれらを使用する方法です。ここから、次のAPIでJWTを?qū)g裝してみてください。RS256などの非対稱キーを使用する他の署名アルゴリズムを試すか、既存のOAUTH2認(rèn)証サーバーに統(tǒng)合してAPIキーとして使用します。 コメントや質(zhì)問(wèn)がある場(chǎng)合は、Twitterからお?dú)葺Xにお問(wèn)い合わせください。

PHP承認(rèn)にJWTを使用する

FAQ PHPでJWTを使用できますか?

PHPでJWTを使用して、Webアプリケーションで認(rèn)証と承認(rèn)のメカニズムを確立することができます。開(kāi)始するには、Composerを使用して、「Firebase/PHP-JWT」や「Lcobucci/JWT」などのPHP JWTライブラリをインストールする必要があります。これらのライブラリは、JWTを作成、エンコード、デコード、および検証するために必要なツールを提供します。 JWTを作成するには、ライブラリを使用して、発行者、視聴者、有効期限などのステートメントを含むトークンを構(gòu)築できます。作成したら、キーでトークンに署名できます。 JWTを受け取るときは、ライブラリを使用してデコードして検証して、その信ity性を確保することができます。トークンが有効で検証されている場(chǎng)合は、宣言にアクセスしてユーザーのIDとアクセス許可を決定し、PHPアプリケーションに安全な認(rèn)証と承認(rèn)を?qū)g裝できるようにします。 鍵を保護(hù)し、JWTを使用する場(chǎng)合のセキュリティベストプラクティスに従うことは、アプリケーションリソースへの不正アクセスを防ぐために重要です。

PHPのJWT認(rèn)証とは何ですか?

PHPでのJWT(JSON Webトークン)認(rèn)証は、Webアプリケーションでユーザー認(rèn)証と承認(rèn)を?qū)g裝するために広く使用されている方法です。これは、トークン認(rèn)証に基づいており、安全でステートレスのユーザー認(rèn)証を可能にします。 JWT認(rèn)証がPHPでどのように機(jī)能するかは次のとおりです。 まず、ユーザー認(rèn)証またはログイン中に、サーバーはJWTを生成します。これは、ユーザーID、ユーザー名、ロールなど、ユーザーに関連するコンパクトで自己完結(jié)型のトークンを含む情報(bào)(クレーム)を生成します。これらの宣言は通常、JSONデータです。次に、サーバーはこのトークンにキーで署名し、その完全性と信頼性を確保します。 第二に、認(rèn)証が成功した後、サーバーはJWTをクライアントに送り返します。クライアントは通常、HTTP Cookieやローカルストレージなどの安全な場(chǎng)所に保存されます。このトークンは、認(rèn)証の証明として機(jī)能します。 最後に、サーバー上のリソースを保護(hù)した後続の要求のために、クライアントは通常、「承認(rèn)」ヘッダーを「ベアラー」スキームで使用して、JWTをリクエストヘッダーに追加します。 JWTを受信した後、サーバーはトークン作成中に使用される同じキーを使用して、その署名を確認(rèn)します。さらに、トークンが期限切れになっておらず、有効な宣言が含まれているかどうかを確認(rèn)します。検証が成功した後、トークン宣言からユーザー情報(bào)を抽出し、承認(rèn)ロジックを?qū)g施して、ユーザーが要求されたリソースにアクセスするために必要な権限を持っていることを確認(rèn)します。このアプローチにより、サーバー側(cè)のセッションストレージなしでPHPアプリケーションで安全でステートレス認(rèn)証が可能になります。 PHPでのJWT認(rèn)証は、スケーラビリティやステートレス性などの多くの利點(diǎn)を提供しますが、キーを保護(hù)し、トークン管理を採(cǎi)用するためのベストプラクティスは、アプリケーションのセキュリティを維持するために不可欠です。確立されたPHP JWTライブラリを使用すると、トークン処理を簡(jiǎn)素化し、セキュリティを強(qiáng)化できます。

PHPのJWTの代替案は何ですか?

PHPでの認(rèn)証と承認(rèn)のためのJWT(JSON Web Tokens)の代替案は、セッションベースの認(rèn)証です。セッションベースの認(rèn)証では、サーバーは、認(rèn)証されたユーザーごとに1つのセッションを維持します。ユーザーがログインすると、一意のセッション識(shí)別子が作成されます(通常、クライアントブラウザーにセッションCookieとして保存されます)。この識(shí)別子は、ユーザーID、ユーザー名、許可など、ユーザーに関連する情報(bào)を含む、ユーザーをサーバー側(cè)のセッションデータに関連付けるために使用されます。 セッションベースの認(rèn)証は、実裝のシンプルさと容易さを提供し、特にJWTのステートレスでスケーラブルな機(jī)能が必要ない場(chǎng)合は、さまざまなWebアプリケーションに適しています。本質(zhì)的には、ユーザーセッション中にユーザー固有のデータ(ショッピングカートのコンテンツやユーザーの好みなど)を管理する必要がある場(chǎng)合に有利になる可能性があります。 ただし、セッションベースの認(rèn)証を使用する際に考慮すべきことがいくつかあります。ステートレス認(rèn)証を必要とする分散またはマイクロサービスベースのアーキテクチャにはあまり適用できない場(chǎng)合があります。さらに、ユーザーセッションの管理は、特により大きなユーザーベースを持つアプリケーションでサーバーの負(fù)荷を増加させる可能性があります。最終的に、PHPでJWTとセッションベースの認(rèn)証を選択することは、アプリケーションの特定のニーズと設(shè)計(jì)上の考慮事項(xiàng)と一致する必要があります。

JWTを使用してPHP APIを保護(hù)する方法は?

PHP APIをJWT(JSON Webトークン)で保護(hù)するには、認(rèn)証と承認(rèn)を組み合わせたマルチステッププロセスが含まれます。まず、適切なPHP JWTライブラリ(「Firebase/PHP-JWT」や「Lcobucci/JWT」など)を選択して、トークン関連の操作を処理し、コンポーザーを使用して依存関係を管理します。 認(rèn)証のために、PHPアプリケーションにユーザー認(rèn)証システムを?qū)g裝する必要があります。このシステムは、データベースまたは認(rèn)証プロバイダーに対してユーザー資格情報(bào)を検証します。認(rèn)証が成功した後、ユーザーのID、ユーザー名、ロールなどのユーザー関連のクレームを含むJWTトークンを生成します。トークンの有効性を制御するために有効期限を設(shè)定し、キーでトークンに署名してください。この署名されたトークンは、認(rèn)証応答の一部としてクライアントに送り返されます。 クライアントは、通常はHTTP Cookieまたはローカルストレージに、受信したJWTを安全に保存します。その後のAPIリクエストの場(chǎng)合、クライアントは「Bearer」スキームを備えた「承認(rèn)」ヘッダーとして、リクエストヘッダーにJWTを含めます。 PHP APIでは、トークンを作成するときに使用される同じキーを使用してその署名を確認(rèn)することにより、著信JWTを確認(rèn)できます。さらに、トークンが期限切れになっておらず、有効な宣言が含まれていることを確認(rèn)します。検証が成功した後、トークン宣言からユーザー情報(bào)を抽出し、認(rèn)証ロジックを?qū)g裝して、ユーザーが要求されたリソースにアクセスするために必要なアクセス許可を確実に持っていることを確認(rèn)します。 キーを安全に保つことは、トークンに署名して検証することが重要であるため、重要です。このキーの漏れは、深刻なセキュリティの脆弱性につながる可能性があります。

以上がJWT(JSON Web Tokens)によるPHP認(rèn)証の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場(chǎng)合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識(shí)は、整數(shù)と浮動(dòng)小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號(hào)は自動(dòng)的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識(shí)の使用 - 標(biāo)識(shí)、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識(shí)を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識(shí)を使用し、結(jié)果は浮動(dòng)小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識(shí)を採(cǎi)取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場(chǎng)合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開(kāi)に便利です。どちらも生産環(huán)境に適しており、十分に文書(shū)化されています。

最新のPHP開(kāi)発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開(kāi)発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開(kāi)発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開(kāi)発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles