JWT は、一般的なクロスドメイン認証ソリューションです。その原理は、ユーザー情報を暗号化してトークンを生成することです。サーバーがリクエストをリクエストするたびに、保存されたキーを使用してトークンの正当性を検証するだけで済みます。トークンを再度保存する必要はなく、セッション データによりサーバーがステートレスになります。
jwt 検証方法は、ユーザー情報を暗号化してトークンを生成することで、サーバーにリクエストが行われるたびに、保存されたキーを使用するだけで済みます。トークンの正しさを検証する必要はありません セッションデータは保存され、サーバーはステートレスになるため、拡張が容易になります。
暗号化前のユーザー情報:
{ "username": "vist", "role": "admin", "expire": "2018-12-08 20:20:20" }
クライアントが受信したトークン:
7cd357af816b907f2cc9acbe9c3b4625
JWT 構造
Aトークンは 3 つの部分に分かれています:
header
payload
Signature(signature)
3 つの部分は、次のように「.」で区切られます。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header
JWT ヘッダー部分は、メタデータを記述する JSON オブジェクト。通常:
{ "typ": "JWT", "alg": "HS256" }
typ は宣言タイプで、「JWT」を指定します。
alg は暗号化アルゴリズムで、デフォルトは「HS256」です
Load
ペイロードはデータのキャリアであり、送信する必要がある実際のデータ情報を保存するために使用され、JSON オブジェクトでもあります。
JWT 公式推奨フィールド:
iss: jwt 発行者
sub: ユーザー向け jwt
aud: jwt を受信する側
{ "username": "vist", "role": "admin" }
署名
署名部分は、最初の 2 つの部分 (ヘッダー部分、ペイロード) はデータの改ざんを防ぎます。 次の手順に従って生成します: 1. 最初にシークレットを指定します2. ヘッダーとペイロードの情報をそれぞれ Base64 に変換します3.ヘッダーで指定されたアルゴリズムを使用して暗号化します。#最後に、署名 = HMACSHA256(base64UrlEncode(header) "."base64UrlEncode(payload),secret)
クライアントによって取得された署名:
header.payload.signature
JWT は再暗号化することもできます。
推奨チュートリアル:「
PHP以上がJWTって何をするの?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。