OAuth 2.0 토큰 폐기
OAuth 2.0 토큰 폐기 (Token Revocation)
Token Revocation 확장(RFC 7009)은 클라이언트가 인가 서버에게 "이 액세스 토큰은 이제 필요 없어요"라고 알리는 메커니즘을 정의해요. 이 기능 덕분에 클라이언트는 '로그아웃'을 구현할 수 있고, 인가 서버는 그 인가와 연관된 보안 자격 증명을 정리할 수 있어요.
사용자가 앱에서 로그아웃하면 클라이언트는 토큰 폐기 엔드포인트를 호출해서 더 이상 토큰이 쓰이지 않도록 해요. 리소스 서버도 내부적으로 유효성을 확인하지만, 폐기는 명시적인 해지를 의미해요.
동작 방식
클라이언트는 인가 서버의 폐기 엔드포인트에 폐기할 토큰을 보내요.
POST /revoke
token=<access_token 또는 refresh_token>
token_type_hint=access_token|refresh_token
token— 폐기할 토큰. 필수.token_type_hint— 토큰 유형 힌트. 선택이지만 인가 서버가 판단을 빠르게 하도록 도와줘요.
인가 서버는 토큰을 검증하고 해당 토큰을 즉시 무효화해요. 이후 이 토큰으로는 접근할 수 없어요. 폐기에는 클라이언트 인증이 필요할 수 있어요.
사용 시나리오
- 사용자 로그아웃 시 액세스·리프레시 토큰 폐기
- 토큰 유출 의심 시 즉시 폐기
- 앱 탈퇴·계정 삭제 시 관련 권한 일괄 정리
리프레시 토큰은 특히 중요해요. 리프레시 토큰을 폐기하지 않으면 액세스 토큰을 계속 재발급할 수 있으니, 로그아웃 시 함께 폐기해야 해요.
주의점
- 인가 서버가 폐기를 지원하지 않을 수도 있어요. 표준이지만 서버 구현에 따라 다를 수 있어요.
- 폐기된 토큰을 재사용하는 공격을 막으려면, 클라이언트는 폐기 후 그 토큰을 다시 쓰지 않아야 해요.
- 토큰 자체가 stateless(JWS)라면 서버는 블랙리스트를 별도 관리해야 폐기가 실효성을 가져요.