0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【学習メモ】JWTの基本とアルゴリズムの違いを理解する

Posted at

1. JWTとは何か

▶ 概要

JWT (JSON Web Token) は、APIエンドポイントの認証やアクセス制御に利用されるトークンである。主に、クライアント・サーバー間の認証に使われ、非同期なAPI認証システムを実装するのに優れている。

JWTの重要な点として、JWT自体はトークン内の情報を暗号化するわけではなく、情報が改ざんされていないことを検証するための手段である。Base64URLでエンコードされているので、誰でもデコードすることが可能である。つまり、JWTはデータの私秉性を保証するものではないため、注意が必要である。

▶ JWTの使用ユースケース

  • 認証 (Authentication)
  • セッション管理 (Session Management)
  • リソースアクセス制御 (Access Control)
  • API間の相互認証

▶ JWTのメリット

  • ステートレスでセッションを管理する必要がない
  • 小さくシンプルなトークンで、URL、HTTPヘッダー、クイリーパラメータ等で送信可能
  • サーバー側でトークンを検証することで、一時的にユーザーを認証可能

2. JWTの構造と仕組み

▶ JWTの構造

JWTは、3つの部分から構成される。

ヘッダー. ペイロード. 署名

1. ヘッダー (Header)

  • アルゴリズム (alg): HS256, RS256など
  • トークン種別 (typ): JWT
{
  "alg": "HS256",
  "typ": "JWT"
}

2. ペイロード (Payload)

  • ユーザー情報、認証情報
  • クレーム (claims): sub, iat, exp
{
  "sub": 1,
  "username": "john",
  "role": "admin",
  "iat": 1672376000,
  "exp": 1672379600
}

3. アクセストークンとリフレッシュトークン

▶ アクセストークンの役割

  • APIにアクセスする際に毎回送信され、リソースへのアクセスを許可する。
  • 短期間で失効する (例: 15分)。

▶ リフレッシュトークンの役割

  • アクセストークンが期限切れになった際に、新しいアクセストークンを発行するために使われる。
  • 長期間有効 (例: 7日)。

▶ 両者の違いと使い分けのポイント

  • アクセストークンは短期間で失効し、リフレッシュトークンが新しいアクセストークンを再発行する。
  • アクセストークンは攻撃者に盗まれても影響が限定的であるが、リフレッシュトークンは厳重に保管する必要がある。

▶ アクセストークンが短期である理由

  • 万が一漏洩した場合の被害を最小限に抑えるため。
  • 一定期間ごとにトークンを更新することでセキュリティを高める。

4. HS256とRS256の違い

▶ HS256とRS256の違いを表で整理

特徴 HS256 RS256
暗号方式 対称暗号方式 非対称暗号方式
鍵の種類 1つの秘密鍵 秘密鍵と公開鍵
セキュリティ 比較的低い 高い
処理速度 速い 遅い
使用場面 内部API 公開API

▶ HS256の仕組みと特徴

  • 1つの秘密鍵を使って署名と検証を行う。
  • シンプルで高速であるが、秘密鍵が漏れるとトークンが偽造されるリスクがある。

▶ RS256の仕組みと特徴

  • 秘密鍵で署名し、公開鍵で検証する。
  • 非対称暗号方式であり、公開鍵を安全に共有できるため、セキュリティが高い。

▶ メリット・デメリット

  • HS256は処理が速くシンプルであるが、セキュリティ面で劣る。
  • RS256はセキュリティが高いものの、処理が遅く管理が複雑になる。

▶ どちらを使うべきか?ユースケースごとの選び方

  • HS256: 内部APIや、サーバーサイドだけで完結するシステム。
  • RS256: 公開APIや、多数のクライアントが関わるシステム。

5. セキュリティの注意点とベストプラクティス

  • JWTの中身は暗号化されていない (誰でもデコード可能)。
  • HTTPSを使うことで、トークンの盗聴を防ぐ。
  • トークンの有効期限は短く設定し、長期間のアクセスはリフレッシュトークンで管理する。
  • リフレッシュトークンはHttpOnly Cookieで安全に保管する。
  • ブラックリストを導入し、特定のトークンを失効させる仕組みを作る。

6. まとめと今後の学習メモ

▶ 学んだポイントの振り返り

  • JWTの基本構造と認証の流れを理解。
  • HS256は対称暗号でシンプル、RS256は非対称暗号でセキュア。
  • アクセストークンとリフレッシュトークンの使い分けが重要。

▶ 今後調べたいことや深掘りしたいトピック

  • JWE (JSON Web Encryption): トークン自体を暗号化する仕組み。
  • JWS (JSON Web Signature): 署名だけを行う仕組み。
  • トークンのスコープ管理や細かいアクセス制御方法。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?