
面接官:JWTについて説明してください。
私:JWT (JSON Web Token) は、JSON形式で表現された情報を安全に伝達するための規格です。認証認可の仕組みでよく使われ、クライアントとサーバー間で信頼できる情報をやり取りできます。
以前のプロジェクトで、マイクロサービス間の認証を改善するためにJWTを導入しました。API Gatewayを介して各マイクロサービスにアクセスする際に、ユーザー認証情報をJWTとして発行し、サービス間の通信で検証することで、セキュリティレベルを向上させ、シングルサインオンに近い体験を提供することができました。具体的には、セッションIDベースの認証と比較して、サーバー側のステートレス化が進み、スケーラビリティが向上しました。
現役エンジニアによる深掘り解説
メリット
ステートレス: JWTはサーバーにセッション情報を保持する必要がないため、サーバーのスケーラビリティが向上します。サーバーはJWTに含まれる情報に基づいて認証を行うため、負荷分散が容易になります。
分散システムへの対応: 複数のドメインやサービス間で認証情報を共有しやすいため、マイクロサービスアーキテクチャに適しています。
柔軟なペイロード: JWTには、ユーザーIDや権限情報など、必要な情報を自由に含めることができます。この情報は、サーバーやクライアントが利用できます。
検証の容易さ: デジタル署名によって改ざんを検知できるため、安全性が高いです。
デメリット
トークンのサイズ: JWTはヘッダー、ペイロード、署名を含むため、Cookieなどの他の認証方法に比べてサイズが大きくなる傾向があります。
トークンの失効: 一度発行されたJWTは、有効期限が切れるまで有効です。トークンを即時失効させるには、追加の仕組み(ブラックリストなど)が必要になります。
クレーム情報の漏洩リスク: ペイロードは暗号化されていないため、機密情報をJWTに含めることは避けるべきです。
リプレイアタック: 盗まれたJWTが悪用される可能性があります。有効期限を短くしたり、追加のセキュリティ対策(トークンバインディングなど)を講じる必要があります。
⚠️ 面接突破のワンポイント
- 面接では、JWTの構造(ヘッダー、ペイロード、署名)とそれぞれの役割を説明できるように準備しましょう。また、どのような署名アルゴリズムが利用されているのか(HS256, RS256など)についても理解しておきましょう。
- セキュリティ上の注意点(トークン失効、クレーム情報の保護など)について、具体的な対策と合わせて説明できるようにしておきましょう。


