JWT
https://jwt.io/
JWT
JWTは暗号化された文字列で、.NET Frameworkによって3つの部分に分割されます。文字列を3つの部分に順番に分割します。
- Header
- Payload
- Signature
各パーツが何を表しているのか、ケーススタディで説明しましょう。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header
Base64暗号化を介してJWTを記述するために使用されるメタ情報
復号化コンテンツ
{
"alg": "HS256", // 署名アルゴリズムは、デフォルトのアルゴリズムは、HS256である。
"typ": "JWT" // トークンの種類
}
Payload
また、送信されるデータや情報を記述するために使用されるBase64によって暗号化されます。
復号化コンテンツ
{
"sub": "",
"name": "John Doe",
"iat":
}
Payloadには公式フィールドが用意されており、ユーザーはカスタムフィールドを追加することもできます!
- iss発行者
- sub
- aud
- exp:有効期限
- nbf:有効時間
- iat発行時間
- jti
Signature
コンテンツの最初の2つの部分はBase64で暗号化されているため、送信プロセスで内部のコンテンツを復号化するのは簡単ですが、改ざんを防ぐために、コンテンツが改ざんされていないことを確認するためのデジタル署名を追加します。
暗号化には秘密鍵が必要です。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
JWT
JWT
- トークンはクライアントに存在するため、サーバーはそれをデコードするだけでよく、サーバーのスペースを占有しません。
- サーバーは簡単に拡張可能
- 改ざん防止のための署名検証
JWT
- トークンを積極的に無効にする方法はありません。
- データレイテンシー:ユーザー情報が更新された後、ユーザーがトークンを使用している場合、サーバーはまだユーザー情報を取得します。
- 透明なコンテンツ、機密データには不向き
- トークンはセッション ID よりも多くのコンテンツを含み、より多くのネットワーク帯域幅を使用します。