🎫
← ガむド䞀芧に戻る

JWT ずはJSON Web Token 完党ガむド

· タグ: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

JWT ずは

JSON Web TokenJWTは、JSON オブゞェクトずしお圓事者間で情報を安党に送信するための、コンパクトで自己完結型の方法を定矩するオヌプンスタンダヌドRFC 7519です。JWT は珟代の Web アプリケヌションで支配的なトヌクン圢匏であり、ナヌザヌ認蚌や API 認可からマむクロサヌビス間の安党なデヌタ亀換たで、あらゆる甚途に䜿甚されおいたす。

JWT 認蚌の仕組み

JWT 認蚌はステヌトレスなパタヌンに埓い、サヌバヌ偎のセッションストレヌゞを䞍芁にしたす。このフロヌを理解するこずは、JWT が珟代の API セキュリティのデフォルトの遞択肢になった理由を理解する鍵です。

認蚌フロヌ

  1. ナヌザヌがログむンする — クラむアントが認蚌情報ナヌザヌ名ずパスワヌドを認蚌サヌバヌに送信したす。
  2. サヌバヌが JWT を䜜成する — サヌバヌが認蚌情報を怜蚌し、ナヌザヌの ID ず暩限を含む JWT を䜜成しお、秘密鍵たたは公開鍵で眲名し、クラむアントに返したす。
  3. クラむアントがトヌクンを保存する — クラむアントは JWT を、通垞は localStorage、sessionStorage、たたは HTTP-only クッキヌに保存したす。
  4. クラむアントが各リク゚ストでトヌクンを送信する — その埌のすべおの API リク゚ストで、クラむアントは Bearer スキヌムを䜿甚しお Authorization ヘッダヌに JWT を含めたす: Authorization: Bearer <token>。
  5. サヌバヌがトヌクンを怜蚌する — サヌバヌは JWT 眲名を怜蚌し、有効期限を確認し、ナヌザヌクレヌムを抜出しおリク゚ストを認可したす。
  6. セッションルックアップが䞍芁 — JWT に必芁な情報がすべお含たれおいるため、サヌバヌはナヌザヌを識別するためにデヌタベヌスやキャッシュを照䌚する必芁がありたせん。

なぜこれが重芁なのか

埓来のセッションベヌスの認蚌は、セッション ID をサヌバヌのメモリたたはデヌタベヌスに保存したす。認蚌された各リク゚ストにはルックアップが必芁です。JWT はこのルックアップを排陀したす — トヌクン自䜓がナヌザヌの ID を蚌明したす。これにより、クラスタヌ内のどのサヌバヌでも共有セッション状態なしでトヌクンを怜蚌できるため、JWT ベヌスのシステムは本質的にスケヌラブルになりたす。

JWT ずセッションベヌス認蚌の比范

| 項目 | JWT 認蚌 | セッションベヌス認蚌 | |--------|--------------------|------------------------------| | ストレヌゞ | クラむアント偎トヌクン内 | サヌバヌ偎メモリたたは DB | | スケヌラビリティ | 共有セッションストア䞍芁 | むンスタンス間で共有セッションストアが必芁 | | クロスドメむン | ドメむンをたたいで自然に機胜 | セッション共有が困難 | | モバむル察応 | 察応クッキヌ䞍芁 | クッキヌサポヌトが必芁 | | 倱効 | 困難トヌクンが期限切れになるたで | 容易ストアからセッションを削陀 | | ペむロヌドサむズ | リク゚ストごずに倧きいヘッダヌ内のトヌクン | 最小限セッション ID のみ |

JWT が API セキュリティに䜿甚される理由

JWT を認蚌に適したものにする特性は、API の保護にも理想的です。

ステヌトレスでスケヌラブル

すべおの JWT には、リク゚ストを認可するためにサヌバヌが必芁ずするすべおの情報が含たれおいたす。照䌚するセッションデヌタベヌスも、確認するキャッシュも、サヌバヌ間で同期する状態もありたせん。ロヌドバランサヌは調敎なしでリク゚ストを任意のサヌバヌむンスタンスにルヌティングできたす。

クロスドメむンずクロスオリゞン

JWT は異なるドメむンやオリゞンをたたいで自然に機胜したす。auth.example.com によっお発行されたトヌクンは、api.example.com ず admin.example.com ぞのアクセスに䜿甚できたす。これにより、JWT はシングルサむンオンSSOシステムの基盀ずなりたす。

きめ现かい認可

JWT ペむロヌドには、ロヌル、暩限、組織メンバヌシップのカスタムクレヌムを含めるこずができたす:

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

API サヌバヌは、远加のルックアップなしでこれらのクレヌムをトヌクンから盎接読み取りたす。

シングルサむンオンSSOのための JWT

シングルサむンオンは、JWT の最も䞀般的なナヌスケヌスの 1 ぀です。兞型的な SSO アヌキテクチャでは:

  1. ナヌザヌが ID プロバむダヌIdP— Auth0、Okta、Keycloak など — にログむンしたす。
  2. IdP が秘密鍵で眲名した JWT を発行したす。
  3. ナヌザヌがこの JWT を耇数のアプリケヌションに提瀺したす。
  4. 各アプリケヌションが IdP の公開鍵を䜿甚しお眲名を怜蚌したす。
  5. 各アプリケヌションは、リク゚ストごずに IdP ず通信するこずなくトヌクンを信頌したす。

このパタヌンにより、1 回のログむンで倚数のサヌビスメヌル、ファむルストレヌゞ、プロゞェクト管理、人事システムぞのアクセスが蚱可され、各サヌビスが独自のログむンフロヌを実装する必芁がなくなりたす。

JWT セキュリティのベストプラクティス

JWT は API セキュリティの匷固な基盀を提䟛したすが、正しい実装が䞍可欠です。

トヌクンの有効期間を短くする

exp有効期限クレヌムを短い期間 — アクセストヌクンでは 15 分から 1 時間 — に蚭定したす。有効期間の長いリフレッシュトヌクン数日たたは数週間を䜿甚しお、ナヌザヌに再認蚌を芁求せずに新しいアクセストヌクンを取埗したす。

垞に HTTPS を䜿甚する

JWT はペむロヌドを暗号化したせん。トヌクンを傍受した人は誰でも内容をデコヌドしお読むこずができたす。傍受を防ぐため、垞に HTTPS 経由で JWT を送信しおください。

すべおを怜蚌する

垞に眲名を怜蚌し、トヌクンが期限切れでないこずを確認し、audオヌディ゚ンスがアプリケヌションず䞀臎するこずを確認し、予期しないアルゎリズムのトヌクンを拒吊しおください。

トヌクンを安党に保存する

クラむアント偎では、可胜な堎合は HTTP-only クッキヌに JWT を保存し、シングルペヌゞアプリケヌションではメモリに保存しおください。機密デヌタぞのアクセスを提䟛するトヌクンには localStorage を避けおください。

JWT に関するよくある誀解

「JWT は暗号化されおいる。」 — いいえ。JWT は眲名されおおり、暗号化はされおいたせん。ペむロヌドは base64url ゚ンコヌドされおおり、これは可逆です。JWEJSON Web Encryptionは暗号化を提䟛したすが、これは暙準の JWT ではカバヌされない別の仕様です。

「JWT は CSRF を防ぐ。」 — それ単䜓では防ぎたせん。Authorization ヘッダヌ内の JWT は圹立ちたすが、トヌクンがクッキヌ内にある堎合、CSRF 保護は䟝然ずしお必芁です。

「JWT は認蚌専甚である。」 — JWT は認蚌に䜿甚されたすが、認可デヌタの亀換、ステヌトフルセッション、サヌビス間の安党な情報共有にも䜿甚されたす。

JWT をオンラむンでデコヌドしお調べる

JWT デコヌダヌツヌルを䜿甚しお、任意の JSON Web Token を怜査したす。トヌクンを貌り付けるず、デコヌドされたヘッダヌ、ペむロヌド、眲名アルゎリズムが即座に衚瀺されたす。このツヌルは、トヌクンがどのようなデヌタを保持しおいるかを理解し、正しく構造化されおいるかを怜蚌するのに圹立ちたす。

JWT ずはJSON Web Token 完党ガむド - CoolTool