무상태 구조에서 JWT는 강제로 토큰을 만료시킬 수 어렵기에 탈취시 해결방안이 뚜렷하지는 않지만 몇몇 방식들로 피해를 최소화할 수 있을거 같습니다.
Access Token은 만료시간을 짧게 두거나 위치 정보를 파악하여 동일 토큰에 대한 다른 환경에서 호출한다면 블랙리스트에 추가하여 토큰을 제어할 수 있습니다. 만약 Refresh Token이 있다면 Refresh Token이 만료되고 재발급하는 과정에서 해당 토큰과 묶여있는 Access Token들을 만료시킬 수 있습니다.
Refresh Token는 보통 장기 권한을 갖고 있기에 보안적으로 중요하기에 서버 저장소에서 관리합니다. 또한 Refresh Token으로 재발급 요청시 재발급 후 기존 토큰을 만료 혹은 무효화 시키는 RTR 방식을 채택할 수 있을거 같습니다.
JWT 블랙리스트를 사용하면 무상태성은 어떻게 되나요?
요청마다 토큰 식별자가 블랙리스트에 있는지 서버 저장소를 조회해야 하므로 완전한 무상태성은 일부 포기하게 됩니다. 대신 탈취된 토큰을 만료 전에 차단할 수 있으므로, 즉시 폐기가 필요한 보안 요구사항과 확장성 사이에서 선택하는 방식입니다.
Refresh Token 재사용은 어떻게 탐지할 수 있나요?
Rotation을 적용하고 각 Refresh Token의 식별자와 토큰 계열을 서버에 저장합니다. 이미 교체되어 폐기된 토큰이 다시 사용되면 탈취 가능성이 있다고 판단하고, 해당 계열의 Refresh Token을 모두 무효화하여 재발급을 차단합니다.
JWT 서명 키가 노출되면 어떻게 대응해야 하나요?
공격자가 유효한 토큰을 직접 만들 수 있으므로 키를 즉시 교체하고 기존 키로 서명된 토큰을 더 이상 신뢰하지 않아야 합니다. 키 식별자
kid를 이용한 키 로테이션 체계를 마련하고, 비밀 키는 코드나 이미지에 넣지 않고 Secret Manager 같은 안전한 저장소에서 관리해야 합니다.