ホームページ >よくある問題 >jwtとは何ですか

jwtとは何ですか

coldplay.xixi
coldplay.xixiオリジナル
2020-10-30 10:56:129955ブラウズ

jwt は単なる略語で、完全なスペルは JSON Web Tokens です。これは、人気のあるクロスドメイン認証ソリューションであり、ネットワーク上で特定のクレームを宣言するために使用される JSON ベースのトークンです。

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」です

jwtとは何ですか

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 を再暗号化することもできます。

JWT の使用法

1. サーバーは、ユーザーのログイン状態に応じてユーザー情報をトークンに暗号化し、クライアントに返します

2 . クライアント クライアントは、サーバーから返されたトークンを受信し、それを cookie

3 に保存します。クライアントとサーバー間の各通信によってトークンがもたらされ、http リクエスト ヘッダー情報に配置できます。 : 承認フィールド内

4. サーバーはトークンを復号化し、内容を検証し、対応するロジックを完了します

##JWT 機能

JWT はより簡潔で、Passed in HTML および HTTP 環境での使用に適しています。

  • JWT は、次のような 1 回限りの検証に適しています: アクティベーション電子メール

  • JWT はステートレス認証に適しています

  • JWT はサーバーサイド CDN コンテンツ配信に適しています

  • データベース セッション クエリよりも時間を節約できます。

  • JWT はデフォルトでは暗号化されません。

  • トークンをキャンセルしたり、トークンの権限を変更したりすることはできません。使用中は

  • #JWT は HTTPS プロトコルを使用してコードを送信することを推奨します

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

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