> 웹 프론트엔드 > JS 튜토리얼 > 블랙리스트 및 Redis를 사용하여 JWT 로그아웃 관리: 초보자에게 친숙한 가이드

블랙리스트 및 Redis를 사용하여 JWT 로그아웃 관리: 초보자에게 친숙한 가이드

Patricia Arquette
풀어 주다: 2025-01-05 14:29:40
원래의
174명이 탐색했습니다.

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

JWT(JSON 웹 토큰)로 보안 API를 구축할 때 사용자 로그아웃을 처리하는 것이 까다로울 수 있습니다. JWT는 상태 비저장이므로 로그아웃 후 토큰을 무효화하는 기본 방법이 없습니다. Redis와 같은 블랙리스트와 도구가 작동하는 곳이 바로 여기입니다. 이러한 개념이 처음이더라도 걱정하지 마세요! 이 가이드는 모든 것을 단계별로 설명하고 실용적인 솔루션을 구현하는 데 도움이 됩니다.

무국적 및 JWT 이해

상태 비저장 시스템

  • 상태 비저장 시스템은 사용자 세션 정보를 서버에 저장하지 않습니다.
  • 각 요청에는 서버가 요청을 처리하는 데 필요한 모든 데이터(예: JWT)가 포함되어 있습니다.

JWT

  • JWT에는 사용자 데이터(예: ID 및 역할)가 포함되어 있으며 서버에서 서명됩니다.
  • 한 번 발급되면 서버는 토큰이나 세션 세부정보를 저장할 필요가 없습니다.
  • 문제: 사용자가 로그아웃하면 JWT가 만료될 때까지 유효합니다.

블랙리스트란 무엇입니까?

블랙리스트는 무효화된 토큰 목록입니다. 사용자가 로그아웃하면 해당 토큰이 이 목록에 추가됩니다. 요청이 이루어질 때마다 서버는 토큰이 블랙리스트에 있는지 확인합니다. 그렇다면 요청이 거부됩니다.

블랙리스트 구현 단계:

  1. 무효화된 토큰을 데이터 구조(예: 배열, 세트 또는 데이터베이스)에 저장합니다.
  2. 요청을 처리할 때 토큰이 블랙리스트에 없는지 확인하세요.
  3. 블랙리스트에서 만료된 토큰을 제거하는 정리 메커니즘을 추가하세요.

왜 Redis인가?

Redis는 고성능 인메모리 키-값 데이터베이스입니다. 다음과 같은 이유로 JWT 블랙리스트 작성과 같은 사용 사례에 적합합니다.

  • 속도: Redis는 초당 수천 건의 읽기/쓰기 작업을 처리할 수 있습니다.
  • 분산: 일관된 데이터를 위해 여러 서버가 동일한 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 설치 가이드
  • 또는 AWS Elasticache 또는 Redis Cloud와 같은 클라우드 서비스를 사용하세요.

2. Node.js에 Redis 통합

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과 같은 명령을 이해합니다.
  • 보안 Redis: 인증 및 IP 화이트리스트를 사용합니다.
  • 블랙리스트 최적화: 보안 강화를 위해 토큰 해시만 저장합니다.

인메모리 솔루션으로 간단하게 시작하여 점진적으로 Redis로 전환하면 부담을 덜 수 있습니다. 즐거운 코딩하세요!


Redis 설정과 관련하여 질문이 있거나 도움이 필요하면 댓글로 알려주시기 바랍니다. ?

위 내용은 블랙리스트 및 Redis를 사용하여 JWT 로그아웃 관리: 초보자에게 친숙한 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿