JWT를 사용할 때 주의해야 할 보안 포인트는 무엇인가요?
답변 포인트
서명 검증, 만료, 저장 위치를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.
정답 및 해설
빠른 요약
JWT는 서명 검증, 짧은 만료 시간, 안전한 저장 위치, refresh token 관리가 중요합니다. 탈취 시 폐기가 어렵기 때문에 권한과 수명을 최소화해야 합니다.
JWT는 서명된 클레임을 클라이언트가 들고 다니는 토큰 형식입니다. 서버가 세션 저장소를 조회하지 않아도 검증할 수 있다는 장점이 있지만, 잘못 쓰면 권한 탈취와 폐기 어려움이 커집니다.
중요한 보안 포인트
서명 알고리즘 검증
토큰 header의 alg를 그대로 신뢰하면 안 됩니다. 서버에서 허용 알고리즘을 고정해야 합니다.
만료 시간
Access token은 짧게, refresh token은 더 엄격하게 관리합니다.
{
"sub": "user-123",
"role": "USER",
"exp": 1779342000,
"iss": "https://auth.example.com",
"aud": "api.example.com"
}exp, iss, aud를 검증하지 않으면 다른 서비스용 토큰이 재사용될 수 있습니다.
저장 위치
localStorage는 XSS에 취약합니다. HttpOnly Secure SameSite 쿠키는 JS 접근을 막지만 CSRF를 함께 고려해야 합니다. 모바일 앱은 OS 보안 저장소를 사용합니다.
토큰 폐기
JWT는 stateless라서 발급 후 만료 전까지 폐기가 어렵습니다. 로그아웃, 계정 정지, 권한 변경이 필요한 서비스는 짧은 만료, refresh token rotation, denylist, token version을 고려합니다.
담으면 안 되는 정보
JWT payload는 암호화가 아니라 Base64URL 인코딩입니다. 주민번호, 비밀번호, 내부 시크릿 같은 민감 정보를 넣으면 안 됩니다.
면접 답변 포인트
JWT는 서명 검증, 만료, issuer/audience 확인, 안전한 저장, 폐기 전략이 핵심입니다. “payload는 누구나 읽을 수 있으므로 민감 정보를 넣지 않는다”는 점도 꼭 언급하면 좋습니다.