728x90
반응형

JWT 8

[Spring Cloud Gateway] 커스텀 필터 구현: JWT 인증/인가 완벽 가이드

MSA에서 '인증'은 모든 서비스의 공통 관심사입니다.이런 공통 로직은 서비스 앞단에 서 있는 단일 진입점, 즉 Spring Cloud Gateway에서 한 번에 처리하는 것이 정석입니다.오늘은 게이트웨이를 단순한 '길 안내원'에서 완벽한 '보안 요원(Filter)'으로 업그레이드하는 방법을 공유해 드릴게요.1. 왜 게이트웨이에서 인증을 처리해야 할까요?구조는 이렇습니다.클라이언트가 API를 요청할 때 HTTP 헤더에 JWT 토큰을 담아 보냅니다.뒷단 서비스(주문, 결제 등)로 넘어가기 전, Gateway가 토큰을 가로채서 유효한지 검사합니다.토큰이 위조되었거나 만료되었다면? Gateway 선에서 401 Unauthorized 에러를 튕겨냅니다. 뒷단 서비스는 찌꺼기 요청을 받을 일조차 없습니다.이를 통..

CSRF 공격 방어하기 (SameSite 쿠키와 토큰 전략 With MSA)

1편(개념)과 2편(XSS 방어)을 통해 웹 보안의 기본기를 다졌습니다.이제 마지막 관문인 CSRF 방어가 남았습니다.예전(Legacy) 방식의 웹 개발에서는 모든 POST 요청마다 CSRF 토큰을 숨겨서 보내느라 고생이 많았습니다.하지만 브라우저 보안 정책이 발전하면서, 이제는 쿠키 설정(SameSite) 하나만 잘해도 공격의 90% 이상을 막을 수 있게 되었습니다.시리즈의 마지막인 오늘은 가장 현대적이고 강력한 CSRF 방어 전략 2가지(SameSite Cookie, CSRF Token)를 실무 코드로 정리해 보겠습니다.1. CSRF가 일어나는 근본 원인 (다시 보기)1편 내용을 아주 짧게 복습해 볼까요? CSRF가 가능한 이유는 "브라우저가 쿠키를 자동으로 전송하기 때문"입니다.내가 bank.com..

XSS와 CSRF 차이점 정리

신입 시절, 기술 면접을 준비하거나 보안 관련 문서를 읽을 때마다 항상 헷갈리던 두 단어가 있었습니다.바로 XSS와 CSRF입니다.둘 다 웹 해킹 기법이라는 건 알겠는데, 막상 "정확히 뭐가 달라?"라고 물어보면 말문이 막히곤 했죠.실무에서 보안 취약점 점검을 하다 보면 이 두 가지는 방어하는 계층과 방법이 미묘하게 다릅니다.오늘은 저처럼 이 두 개념이 헷갈리셨던 분들을 위해, XSS와 CSRF의 핵심 개념과 결정적인 차이점, 그리고 인증 방식(Session vs Token)에 따른 영향까지 아주 쉽게 정리해 보려고 합니다.이 글을 다 읽으시면 면접장에서 자신 있게 대답하실 수 있을 거예요.1. 이름부터 헷갈리는 두 녀석, 직관적으로 이해하기본격적인 코드에 앞서, 비유를 통해 상황을 머릿속에 그려볼까요?..

[NestJS] Refresh Token Rotation(RTR) 구현 (Prisma + Passport)

지난 포스팅까지 우리는 JWT Access Token을 발급하고 검증하는 기초적인 인증 시스템을 만들었습니다.하지만 실무에서는 Access Token 하나만으로는 부족합니다.유효기간이 짧으면 사용자가 불편하고, 길면 보안이 취약해지기 때문이죠.오늘은 이 딜레마를 해결하는 Refresh Token, 그중에서도 가장 보안 강도가 높은 RTR(Refresh Token Rotation) 방식을 구현해 보겠습니다.단순히 유저 테이블에 토큰 문자열 하나를 저장하는 방식이 아닙니다.별도의 토큰 관리 테이블을 두고, 사용된 토큰을 isRevoked (무효화) 처리하여 재사용 공격까지 완벽하게 방어하는 실무 레벨의 코드를 공개합니다.1. RTR(Refresh Token Rotation)이란?일반적인 Refresh Tok..

Backend/NestJs 2025.12.31

토큰이 탈취돼도 괜찮아? Access Token & Refresh Token 완벽 구현

지난 2편을 통해 우리는 JWT의 구조에 대해 배웠습니다.하지만 JWT에는 치명적인 약점이 하나 있었죠."한 번 발급된 토큰은 서버가 강제로 만료시킬 수 없다."이 말은 즉, 해커가 여러분의 토큰을 훔쳐 가면 유효기간이 끝날 때까지 해커가 내 계정의 주인 행세를 할 수 있다는 뜻입니다.그렇다고 유효기간을 5분으로 줄이자니, 사용자가 5분마다 로그인을 해야 하는 최악의 경험을 하게 됩니다.보안(Security)과 사용자 경험(UX), 이 두 마리 토끼를 모두 잡기 위해 등장한 것이 바로 Access Token과 Refresh Token의 이중주입니다.1. 딜레마 해결: 유효기간을 쪼개자핵심 아이디어는 간단합니다."자주 쓰는 건 짧게, 가끔 쓰는 건 길게" 가져가는 것입니다.🎫 Access Token (출..

JWT, 로그인 구현할 때 복붙만 했나요? 구조 완벽 분석

지난 1편에서는 세션의 한계를 극복하기 위해 토큰 기반 인증이 대세가 되었다고 말씀드렸습니다.그 토큰 기술의 사실상 표준이 바로 오늘 다룰 JWT(Json Web Token)입니다.많은 개발자분이 라이브러리를 통해 JWT를 생성하고 검증하지만, 정작 "이 긴 문자열 안에 도대체 뭐가 들어있는지", "왜 안전하다고 하는지" 정확히 모르는 경우가 많습니다.오늘 글에서는 JWT의 껍질을 벗겨, 그 내부 구조와 핵심 원리를 아주 쉽게 설명해 드립니다.1. JWT(Json Web Token)란 무엇인가?JWT는 이름 그대로 JSON 객체를 사용해 정보를 안정성 있게 전달하는 웹 표준(RFC 7519)입니다.쉽게 말해, "인증에 필요한 정보들을 암호화시킨 JSON 토큰"입니다. JWT는 아래와 같이 .(점)을 구분..

세션 vs 토큰, RESTful API 시대의 인증 방식

웹 개발 트렌드가 MPA(Multi Page Application)에서 SPA(Single Page Application)로,그리고 Monolithic에서 MSA(Micro Service Architecture)로 변화하면서 인증 방식에도 거대한 지각 변동이 일어났습니다.과거에는 당연하게 사용되던 '세션' 방식이 왜 최근에는 '토큰' 방식, 특히 JWT로 대체되고 있을까요?단순히 유행이라서가 아닙니다.여기에는 RESTful API의 철학과 프론트엔드 상태 관리의 발전이라는 기술적 배경이 숨어 있습니다.1. HTTP의 대전제: 무상태(Stateless)란?본격적인 비교에 앞서, 개발자 면접 단골 질문이기도 한 Stateless(무상태)와 Stateful(상태 유지)의 차이를 카페 주문 상황에 빗대어 아주 ..

[NestJS] 로그인 그 후, JWT 토큰 발급 및 인증 구현하기 (Prisma + Passport)

지난 포스팅에서는 Prisma와 Passport Local Strategy를 이용해 회원가입과 아이디/비밀번호 검증까지 완료했습니다.회원가입, 아이디/비밀번호 검증 포스팅 보러가기 하지만 로그인 API가 사용자 정보를 그대로 반환하고 끝난다면 반쪽짜리 기능이겠죠?이번 글에서는 로그인 성공 시 JWT(Json Web Token)를 발급하고, 클라이언트가 이 토큰을 가져왔을 때 유효성을 검증(Passport JWT Strategy)하는 과정을 다룹니다.(참고: 환경변수 관리를 위한 ConfigModule 설정은 이전 포스팅에서 다뤘으므로, 이미 세팅되어 있다고 가정하고 진행합니다.)1. 필수 패키지 설치JWT 생성과 검증을 담당할 패키지들을 설치합니다.# JWT 및 Passport-jwt 전략 패키지npm ..

Backend/NestJs 2025.12.20