피드로 돌아가기
Dev.toSecurity
원문 읽기
Devise-JWT와 JTI 기반 Token Revocation을 통한 API 보안 설계
Rails 8 API with Devise-JWT
AI 요약
Context
상태를 유지하지 않는 Stateless한 JWT 특성으로 인한 토큰 무효화 및 권한 변경 반영의 어려움 존재. DB 조회 최소화와 실시간 권한 제어 사이의 Trade-off 해결이 필요함.
Technical Solution
- JTI(JWT ID)를 User 테이블에 저장하여 토큰별 고유 식별자를 관리하는 JTIMatcher 전략 채택
- Token 내 Role 정보를 Payload에 포함하여 DB 접근 없는 즉각적인 Authorization 구현
- Role 변경 시 DB의 JTI 값을 강제 갱신하여 기존 JWT를 즉시 무효화하는 Token Rotation 로직 적용
- Rack-CORS 설정을 통한 Authorization 헤더 노출로 Frontend의 JWT 접근성 확보
- Rails API 모드 최적화를 위해 navigational_formats를 제거하여 불필요한 뷰 렌더링 배제
- Devise-JWT의 dispatch_requests 및 revocation_requests 설정을 통한 로그인/로그아웃 엔드포인트 제어
실천 포인트
- JWT Payload에 Role을 포함하여 API 호출 시마다 발생하는 DB 조회 부하를 줄일 것 - 보안 요구사항에 따라 JTI 기반의 Revocation Strategy를 도입하여 세션 강제 종료 기능을 구현할 것 - 권한 변경과 동시에 JTI를 변경하여 Stateless 토큰의 최신 상태 동기화 문제를 해결할 것 - CORS 설정 시 expose 옵션에 Authorization 헤더를 명시하여 클라이언트 토큰 수신을 보장할 것