ホームページ >ウェブフロントエンド >jsチュートリアル >ブラックリストと Redis を使用した JWT ログアウトの管理: 初心者向けガイド

ブラックリストと Redis を使用した JWT ログアウトの管理: 初心者向けガイド

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 14:29:40177ブラウズ

Managing JWT Logout with Blacklists and Redis: A Beginner-Friendly Guide

JWT (JSON Web Token) を使用して安全な API を構築する場合、ユーザーのログアウトの処理は難しい場合があります。 JWT はステートレスであるため、ログアウト後にトークンを無効にするすぐに使用できる方法はありません。そこでブラックリストや Redis などのツールが活躍します。これらの概念に慣れていない場合でも、心配する必要はありません。このガイドでは、すべてを段階的に説明し、実用的なソリューションの実装に役立ちます。

ステートレス性と JWT について

ステートレス システム

  • ステートレス システムは、ユーザー セッション情報をサーバーに保存しません。
  • 各リクエストには、サーバーが処理するために必要なすべてのデータ (JWT など) が含まれます。

JWT

  • JWT にはユーザー データ (ID やロールなど) が含まれており、サーバーによって署名されています。
  • 一度発行されると、サーバーはトークンやセッションの詳細を保存する必要はありません。
  • 問題: ユーザーがログアウトしても、JWT は有効期限が切れるまで有効です。

ブラックリストとは何ですか?

ブラックリストは、無効化されたトークンのリストです。ユーザーがログアウトすると、そのトークンがこのリストに追加されます。リクエストが行われるたびに、サーバーはトークンがブラックリストにあるかどうかを確認します。一致する場合、リクエストは拒否されます。

ブラックリストを実装する手順:

  1. 無効化されたトークンをデータ構造 (配列、セット、データベースなど) に保存します。
  2. リクエストを処理するときは、トークンがブラックリストに含まれていないことを確認してください。
  3. 期限切れのトークンをブラックリストから削除するクリーンアップ メカニズムを追加します。

なぜリディスなのか?

Redis は、高性能のメモリ内キー/値データベースです。以下の理由から、JWT をブラックリストに登録するようなユースケースに最適です。

  • 速度: Redis は 1 秒あたり数千回の読み取り/書き込み操作を処理できます。
  • 分散: 一貫したデータを得るために複数のサーバーが同じ Redis インスタンスを共有できます。
  • TTL (Time-to-Live): Redis は、指定された期間が経過するとエントリを自動的に削除できます。

Redis なしで始める方法

これらの概念を初めて使用する場合は、単純なメモリ内ソリューションから始めてください。

const blacklist = new Set();

// Add token to blacklist
authController.logout = (req, res) => {
  const token = req.headers.authorization.split(" ")[1];
  blacklist.add(token);
  res.status(200).json({ message: "Logged out successfully" });
};

// Middleware to check token validity
middleware.verifyToken = (req, res, next) => {
  const token = req.headers.authorization.split(" ")[1];
  if (blacklist.has(token)) {
    return res.status(401).json({ message: "Invalid token" });
  }
  next();
};

このアプローチは小規模プロジェクトには機能しますが、制限があります。アプリがスケールする場合は、Redis のようなより堅牢なソリューションが必要になります。

Redis の使用を開始する

1.Redisをインストールする

  • Redis をローカルにインストールする: Redis インストール ガイド
  • 代わりに、AWS Elasticache や Redis Cloud などのクラウド サービスを使用します。

2. Redis を Node.js に統合する

ioredis ライブラリを使用して、Node.js アプリで Redis と対話します。

const blacklist = new Set();

// Add token to blacklist
authController.logout = (req, res) => {
  const token = req.headers.authorization.split(" ")[1];
  blacklist.add(token);
  res.status(200).json({ message: "Logged out successfully" });
};

// Middleware to check token validity
middleware.verifyToken = (req, res, next) => {
  const token = req.headers.authorization.split(" ")[1];
  if (blacklist.has(token)) {
    return res.status(401).json({ message: "Invalid token" });
  }
  next();
};
npm install ioredis

Redis とインメモリの比較

Feature In-Memory (Set) Redis
Scalability Limited to a single server Distributed across servers
Speed Very fast Equally fast
Persistence Lost on server restart Data persists across restarts
Cleanup Manual Automatic with TTL

次のステップ

  • Redis の基本を学ぶ: SETEX、GET、DEL などのコマンドを理解します。
  • Secure Redis: 認証と IP ホワイトリストを使用します。
  • ブラックリストの最適化: セキュリティを強化するためにトークン ハッシュのみを保存します。

インメモリ ソリューションで簡単に始めて、徐々に Redis に移行することで、圧倒されることはありません。コーディングを楽しんでください!


ご質問がある場合、または Redis のセットアップについてサポートが必要な場合は、コメントでお知らせください。 ?

以上がブラックリストと Redis を使用した JWT ログアウトの管理: 初心者向けガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。