패스잇
보안 · 심화

OAuth 2.0에서 리프레시 토큰(Refresh Token)은 액세스 토큰을 재발급하는 데 사용되며, 장기간 유효성을 가집니다. 이때 리프레시 토큰 재사용 공격(Refresh Token Replay Attack)을 방지하기 위해 롤링(Rotation) 전략이 권장됩니다. 리프레시 토큰 롤링의 정확한 동작 방식과 이점이 무엇인지 설명하고, 롤링 전략을 구현할 때 발생할 수 있는 잠재적인 문제점(예: 동시 요청 처리, 클라이언트 상태 관리)과 이에 대한 해결 방안을 제시해 주십시오.

힌트 · 리프레시 토큰 롤링은 매 사용마다 새 토큰을 발급하고 이전 토큰을 무효화하여 재사용 공격을 방지합니다. 동시성 문제 해결을 위해 이전 토큰 허용 기간 설정, 트랜잭션 처리 등을 고려해야 합니다.

리프레시 토큰 롤링토큰 무효화동시성 제어멱등성클라이언트 상태 관리

모범답안

OAuth 2.0에서 리프레시 토큰 롤링은 리프레시 토큰을 사용하여 액세스 토큰을 갱신할 때마다 새로운 리프레시 토큰을 발급하고, 기존 리프레시 토큰은 즉시 무효화하는 방식입니다. 이렇게 하면 공격자가 탈취한 리프레시 토큰을 재사용하더라도, 이미 무효화되었기 때문에 공격이 실패합니다.

롤링 전략의 이점은 리프레시 토큰 탈취 시도를 효과적으로 막을 수 있다는 점입니다. 하지만 동시 요청 처리 문제가 발생할 수 있습니다. 예를 들어, 클라이언트가 동시에 여러 개의 갱신 요청을 보내면, 첫 번째 요청으로 토큰이 갱신된 후 나머지 요청은 무효화된 토큰을 사용하게 됩니다.

이러한 문제를 해결하기 위해 몇 가지 방법을 고려할 수 있습니다. 첫째, 이전 리프레시 토큰을 일정 기간 동안 유효하게 유지하는 것입니다. 이 기간 동안에는 이전 토큰으로도 갱신 요청을 처리할 수 있습니다. 둘째, 갱신 요청 처리 시 트랜잭션을 사용하여 토큰 발급과 무효화를 원자적으로 처리하는 것입니다. 셋째, 클라이언트 측에서 갱신 요청에 대한 멱등성을 보장하도록 구현하는 것입니다. 즉, 동일한 요청이 여러 번 전송되더라도 결과가 동일하도록 해야 합니다. 마지막으로, 클라이언트가 새로운 리프레시 토큰을 안전하게 저장하고 관리하도록 하는 것이 중요합니다.

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

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

함께 보는 인증 / 인가 (JWT · OAuth) 면접 질문

← 인증 / 인가 (JWT · OAuth) 면접 질문 전체 보기