---
title: JWTについて
tags: 
author: [Katsushi21](https://www.docswell.com/user/Katsushi21)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/G7W3WZ4272.jpg?width=480
description: JWTについて by Katsushi21
published: January 18, 24
canonical: https://www.docswell.com/s/Katsushi21/ZENMRJ-2024-01-18-001354
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/G7W3WZ4272.jpg)

1/7
JWTについて


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JZV512473.jpg)

2/7
JSON Web Token(JWT)とは
情報を安全に送受信するためのJSONベースの規格
ユーザ
①
Email
パスワード
②
トークン
③
リクエスト&amp;トークン
④
レスポンス
サービス
サーバ
トークンを用いる情報のやり取りの際、
暗号化したJSONをトークンとして扱うため、
全世界共通のルール「JWT」が定められた。


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YE659LVGJV.jpg)

3/7
JWTの構造
JWTは3​つの要素から成る。
各プロパティはクレームと呼ばれる
ヘッダ
ペイロード
署名
署名のアルゴリズムなどを
格納する
任意のクレームを格納する。
標準クレームのほかに
カスタムクレームも格納できる
エンコードしたヘッダとペイロードを
指定アルゴリズムと秘密鍵で暗号化する
これらをそれぞれBase64urlでエンコードし、
「.」でつなげたものがトークンとして扱われる


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GE5YN1DXE4.jpg)

4/7
JWTの利点
・サーバの秘密鍵による署名を含めることができるため、
正規のトークンか判別しやすい
・「?」や「=」など、URLに影響を与える文字を含まない
(URLセーフ)
・認証情報をJWTとしてユーザ側が保持することで、
複数のサービスへのSSOが容易になる


# Page. 5

![Page Image](https://bcdn.docswell.com/page/972G518Q7R.jpg)

5/7
JWTによるログイン例
秘密鍵と公開鍵により、複数サーバに同時ログインできる
公開鍵
サーバA
公開鍵
サーバB
Email
パスワード
秘密鍵
JWT
認証サーバ
ユーザ
公開鍵
JWT
サーバC


# Page. 6

![Page Image](https://bcdn.docswell.com/page/DJYVKZ6YJM.jpg)

6/7
JWTによる認証の弱点
・サーバ側に情報を保持しないため、ユーザ依存の
タイミングでトークンの完全無効化はできない
・XSS攻撃や秘密鍵漏洩による情報漏洩への対策が難しい
・サーバ側にJWTの情報を保存することで、上記問題に
対策できるが、スケーラビリティが損なわれる


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V7NMR3ZRE8.jpg)

7/7
JWTをどう使うか？
・ログイン時はJWTを使い、その後のセッション管理は
セッションIDで行うか、JWTの情報をサーバに保存する
→SSOに便利だが、JWTのステートレスの利点が失われる
・LocalStorageとCookie​のどちらに保存するべきか
→クライアント単体で保持する以上、どちらもリスクがある
・そもそも認証には使わない方がいいか
→JWTは安全な送受信のための規格なので、
認証以外にも使い道はたくさんあると思われる


