ホームページ >バックエンド開発 >PHPの問題 >PHPでレスポンスヘッダーにトークンを追加する方法

PHPでレスポンスヘッダーにトークンを追加する方法

藏色散人
藏色散人オリジナル
2023-02-20 09:28:203927ブラウズ

応答ヘッダーにトークンを追加する

php メソッド: 1. ベアラー モードを使用して、リクエストのヘッダーの Authorization フィールドに JWT を追加します; 2. サーバーがリクエストを受信した後、JWT 仕様を使用してトークンとリターン それをクライアントに渡すだけです。

PHPでレスポンスヘッダーにトークンを追加する方法

このチュートリアルの動作環境: Windows 10 システム、PHP バージョン 8.1、DELL G3 コンピューター

トークンの追加方法phpのレスポンスヘッダーは?

php トークンの生成と使用

1. ログインにトークンを使用する理由

フロント エンドとバック エンドの分離または複数のサポートWeb アプリケーションの場合、元の Cookie またはセッションを使用する際に大きな問題が発生します。

Cookie とセッション認証は、認証される前に同じメイン ドメイン名の下にある必要があります (現在、セッションは Redis に保存できます)この問題を解決するために) 。

2. 解決策

oauth2 と jwt

jwt: はセキュリティ標準です。基本的な考え方は、ユーザーが認証サーバーにユーザー名とパスワードを提供し、サーバーがユーザーが送信した情報の正当性を検証し、検証が成功するとトークン (トークン) が生成されて返されるというものです

OAuth2: 安全な認証フレームワークです。システム内のさまざまなロール、ユーザー、サービス フロントエンド アプリケーション (API など)、クライアント (Web サイトやモバイル APP など) の間で相互認証を実現する方法について詳しく説明します。

(ここではjwtを使用し、認証にはこのJSON Web Tokenを使用します)

3. 生成方法

ヘッダー:暗号化タイプ

説明 :メッセージcontent

Key: ランダムなコードを使用して暗号化します

上記3つの部分を結び、hs256を使用して暗号化してトークンを生成します

4. 詳細な生成方法

1). ヘッダーは通常、トークンのタイプ (つまり JWT) と使用される暗号化アルゴリズム (SHA256 や RSA など) の 2 つの部分で構成されます。

{
      "alg": "HS256",
      "typ": "JWT"
}

そして、この json は Base64Url でエンコードされます。最初の部分

2) ペイロードは宣言です。宣言はエンティティに関するものです。

{
      "exp": "1525785339",
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
}

ペイロードは Base64Url でエンコードされ、2 番目の部分になります

(追記: この情報は改ざんから保護されていますが、誰でも読み取ることができます。重要な情報は暗号化されていない限り送信しないでください。中に入れます)

3). 暗号化キーを使用します

4). 署名するには、最初のエンコードされた部分、2 番目のエンコードされた部分、そしてキー キーを使用する必要があります。最初の部分の暗号化アルゴリズムを使用して、

HMACSHA256(
          base64UrlEncode(header) + "." + base64UrlEncode(payload),
          key
)

に署名します。この署名は、メッセージが改ざんされているかどうかを確認するために使用されます。

(PHP は暗号化に crypt メソッドを使用します。注: SHA-256 は改ざん防止に使用され、AES-256 は暗号化に使用されます。この 2 つの概念は異なります)

5. トークン保存場所

通常は、ベアラー モードを使用して、リクエスト ヘッダーの Authorization フィールドに JWT (Authorization: Bearer) を追加する必要があります (もちろん、JWT をリクエスト ヘッダーの後にパラメーターとして渡すなど、どこにでも配置することもできます) URLはクライアントが認識できるものであれば構いませんが、JWTは仕様なので仕様に従うのが良いでしょう)

6. 利用方法

クライアントユーザーがユーザー名とパスワードを入力します。そして、ログインしてトークンをリクエストします。

サーバー リクエストを受信したら、JWT 仕様を使用してトークンを生成し、クライアントに返します。

クライアントはトークンを受信した後、それを復号化します。 、トークンの適時性 (トークンの有効期限) を検証し、保存します

クライアントはトークンを使用してデータを要求します

サーバーがトークンを受信して​​復号化した後、ユーザーの本人確認、適時性の確認、ユーザーの確認を行う

7. デメリット

1. 発行済みトークンの無効化(トークン利用期間の更新)ができない

2期限切れのデータを扱うのは簡単ではありません (トークンの無効化をサポート)

したがって、トークンを使用する場合、トークンがキャッチされた場合、偽造され、なりすますことができます。したがって、セキュリティが比較的高い場合でも、oauth2

を使用することをお勧めします。 推奨学習: "PHP ビデオ チュートリアル "

以上がPHPでレスポンスヘッダーにトークンを追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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