패스잇
보안 · 심화

Access Token을 JWT로 발급할 때, 토큰을 stateless하게 검증하면 즉시 폐기(로그아웃, 탈취 대응)가 어렵습니다. JWT의 stateless 검증 이점을 최대한 유지하면서 토큰 무효화(revocation)를 구현하려면 어떤 설계 전략들을 고려할 수 있나요?

힌트 · JWT의 stateless 장점과 즉시 폐기 요구가 충돌하는 지점, 블랙리스트/짧은 만료+리프레시/토큰 버전 등의 트레이드오프 관점에서 접근하세요.

Refresh TokenToken BlacklistShort ExpirationSession Management

모범답안

JWT의 stateless 장점을 유지하면서 즉시 폐기를 구현하는 것은 흥미로운 문제입니다. 몇 가지 전략을 고려해볼 수 있습니다.

가장 일반적인 접근은 Refresh Token을 사용하는 것입니다. Access Token은 짧게 만료시키고, 사용자가 로그아웃하거나 토큰이 탈취되었다고 의심될 때 Refresh Token을 무효화하는 방식입니다. Refresh Token은 서버 측에서 관리하며, 유효한 Refresh Token이 있어야 새로운 Access Token을 발급받을 수 있습니다.

또 다른 방법은 Token Blacklist를 사용하는 것입니다. 로그아웃하거나 토큰을 무효화해야 할 때, 해당 토큰의 ID(jti 클레임 등)를 서버의 캐시나 데이터베이스에 블랙리스트로 등록합니다. Access Token 검증 시 이 블랙리스트를 확인하여 무효화된 토큰인지 판단하는 거죠. 다만, 이 방법은 stateless의 장점을 일부 희생하게 됩니다.

짧은 만료 시간을 가진 Access Token을 사용하는 것도 방법입니다. 만료 시간을 매우 짧게 설정하면 토큰이 탈취되더라도 유효한 시간이 짧아 피해를 최소화할 수 있습니다. 물론, 사용자 경험을 위해 Refresh Token과 함께 사용해야 합니다.

마지막으로, 토큰 버전 관리를 고려할 수 있습니다. 사용자별로 토큰 버전을 관리하고, 로그아웃 시 해당 사용자의 토큰 버전을 업데이트하는 방식입니다. Access Token 검증 시 현재 사용자의 토큰 버전과 일치하는지 확인하는 거죠.

각 전략마다 장단점이 있으므로, 서비스의 요구사항과 트레이드오프를 고려하여 적절한 조합을 선택하는 것이 중요합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 웹 보안 면접 질문

← 웹 보안 면접 질문 전체 보기