ホームページ  >  記事  >  バックエンド開発  >  JWTって何をするの?

JWTって何をするの?

Guanhui
Guanhuiオリジナル
2020-06-28 16:23:494454ブラウズ

JWT は、一般的なクロスドメイン認証ソリューションです。その原理は、ユーザー情報を暗号化してトークンを生成することです。サーバーがリクエストをリクエストするたびに、保存されたキーを使用してトークンの正当性を検証するだけで済みます。トークンを再度保存する必要はなく、セッション データによりサーバーがステートレスになります。

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 を受信する側

  • #exp: jwt の有効期限。この有効期限は発行時間よりも長くなければなりません

  • nbf: jwt が利用できなくなる時刻を定義します。

  • iat: jwt

  • jti の発行時刻: jwt の一意の ID。主にリプレイ攻撃を回避するためのワンタイム トークンとして使用されます。

次のようなカスタム フィールドを使用することもできます。

{
    "username": "vist",
    "role": "admin"
}

署名

署名部分は、最初の 2 つの部分 (ヘッダー部分、ペイロード) はデータの改ざんを防ぎます。

次の手順に従って生成します:

1. 最初にシークレットを指定します

2. ヘッダーとペイロードの情報をそれぞれ Base64 に変換します

3.ヘッダーで指定されたアルゴリズムを使用して暗号化します。

#最後に、署名 = HMACSHA256(base64UrlEncode(header) "."base64UrlEncode(payload),secret)

クライアントによって取得された署名:

header.payload.signature

JWT は再暗号化することもできます。

推奨チュートリアル:「

PHP

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

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