한국어
  • token
  • oidc
  • refresh token
  • rotation
  • security

리프레시 토큰 회전이란 무엇이며 왜 중요한가요?

리프레시 토큰 회전이 리프레시 토큰의 안전을 보호하기 위한 효과적인 방법인 이유에 대해 알아보세요.

Charles
Charles
Developer

리프레시 토큰이란 무엇인가?

리프레시 토큰은 현재 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 얻기 위해 사용되는 특별한 유형의 토큰입니다. 더 자세한 내용은 저희의 이전 게시물 OIDC에서 토큰 이해하기를 참조하세요.

소개 시, 우리는 Logto에서 리프레시 토큰의 안전을 보호하기 위해 기본적으로 "리프레시 토큰 회전" 메커니즘을 적용했다고 언급한 바 있습니다.

하지만 "리프레시 토큰 회전"이 정확히 무엇일까요? 이것이 최종 사용자에게 어떤 이점을 줄까요? 함께 알아보아요!

리프레시 토큰 회전이란 무엇인가?

리프레시 토큰 회전은 리프레시 토큰을 사용하여 새로운 액세스 토큰을 얻을 때 이전 리프레시 토큰을 무효화하고 새로운 것을 발행하는 메커니즘입니다. 이 메커니즘은 리프레시 토큰이 만료되기 전에 갱신되도록 보장합니다.

왜 리프레시 토큰 회전이 필요할까요?

리프레시 토큰은 대개 주 또는 월 단위로 긴 수명을 가집니다. 리프레시 토큰으로 새로운 액세스 토큰을 얻을 수 있기 때문에 리프레시 토큰은 공격자에게 매력적인 대상이 됩니다. 따라서 OAuth 2.0 BCP에 따르면, 권한 부여 서버는 이러한 공격을 방지하기 위해 다음 조치를 취해야 합니다.

  • 발신자 제약 리프레시 토큰 발행: 클라이언트가 리프레시 요청 헤더에 서명 (Sec-Token-Binding)을 제공하여 발행된 리프레시 토큰이 특정 클라이언트에 암호적으로 연결되도록 합니다. 그러나 현재 발신자 제약을 받는 네이티브 클라이언트는 몇 안 되고, 대부분의 모던 SPA와 모바일 클라이언트는 공개되어 있습니다.
  • 리프레시 토큰 회전: 권한 부여 서버는 새로운 리프레시 토큰을 발행하고(일반적으로 새로운 액세스 토큰과 교환할 때) 이전 것을 무효화합니다. 이는 토큰 유출의 위험을 줄입니다.

리프레시 토큰 회전을 구현하는 모범 사례

Logto에서 사용자가 성공적으로 로그인되면, DB에 Grant 객체가 처음 생성되고, 후속으로 발행되는 리프레시 토큰은 참조 grantId를 가지고 첫 Grant 객체를 가리킵니다.

리프레시 토큰 회전이 발생할 때마다 이전 리프레시 토큰은 소비된 것으로 표시되고, Logto 권한 부여 서버는 동일한 grantId를 가진 새로운 리프레시 토큰을 발행합니다.

가정하건대 이전 리프레시 토큰이 유출되었다면, 합법적인 클라이언트 또는 공격자 중 하나가 그것을 사용하여 액세스 토큰으로 교환했을 것입니다. 그 누가 그렇게 했든지 간에, 유출된 리프레시 토큰은 이미 회전되고 소비된 것으로 표시되었습니다. 소비된 리프레시 토큰을 두 번째로 사용한 사람이 권한 부여 서버에 침해 사실을 알립니다. 권한 부여 서버는 동일한 grantId를 가진 모든 리프레시 토큰을 취소합니다.

위의 경우, 경고를 트리거한 후, 합법적인 클라이언트는 새로운 리프레시 토큰을 얻기 위해 다시 로그인해야만 합니다. 반면 공격자는 시스템에 대한 통제력을 잃고 접근이 차단됩니다.

리프레시 토큰 회전은 언제 발생합니까?

Logto에서 리프레시 토큰 회전의 기본 동작은 다음과 같이 정의됩니다:

  • 클라이언트가 발신자 제약이 있거나 비공개 클라이언트(예: 서버 렌더링 웹 애플리케이션)인 경우, 리프레시 토큰 회전은 총 TTL의 70%에 도달할 때 발생합니다.
  • 클라이언트가 공개 클라이언트인 경우(예: 단일 페이지 웹 애플리케이션), 리프레시 토큰 회전은 액세스 토큰으로 교환할 때마다 발생합니다. 토큰 교환 응답은 새로운 액세스 토큰과 새로운 리프레시 토큰을 함께 반환하게 됩니다.

Logto에서 리프레시 토큰 회전을 활성화/비활성화하는 방법은?

Logto 관리자 콘솔에서 관리자 콘솔 > 애플리케이션으로 이동하여 리프레시 토큰 회전을 전환할 애플리케이션을 선택하세요. 애플리케이션 세부 사항 페이지에서 "고급 설정" 탭으로 이동하여 페이지 하단으로 스크롤하면 스위치와 몇 가지 다른 유용한 설정을 찾을 수 있습니다.

앱 세부정보

스위치를 끄면 리프레시 토큰은 만료될 때까지 한번도 회전되지 않을 것입니다. 따라서 리프레시 토큰 회전을 항상 활성화할 것을 강력히 권장합니다.

요약: 리프레시 토큰 회전이란 무엇이며 왜 중요한가요?

리프레시 토큰 회전은 애플리케이션에서 리프레시 토큰의 안전성을 보장하는 모범 사례입니다. 리프레시 토큰을 사용하여 새로운 액세스 토큰을 얻을 때마다 이전 리프레시 토큰을 무효화하고 새로운 것을 발행합니다. 이 메커니즘은 토큰 유출의 위험을 줄이고 리프레시 토큰의 안전성을 보장합니다.

Logto는 업계 선도적인 모범 사례를 따르며 사용자 안전을 항상 최우선으로 합니다.

이 블로그가 리프레시 토큰 회전 메커니즘에 대한 의문을 잘 설명했기를 바랍니다. 여전히 불명확한 점이 있는 경우 알려주세요. 여러분의 피드백과 제안을 언제든지 환영합니다!

Logto를 사용해보고 더 안전한 인증 경험을 누리세요.