Skip to content

[ Auth ] Access Token 으로 /auth/refresh 가 통과한다 #84

Description

@RosieOh

💚 어떤 기능인가요?

AuthController.refreshTokenjwtService.validateToken 을 쓴다.
이 검증은 서명·만료·issuer 만 보므로 Access Token 도 통과한다.

JwtService 는 이미 typ 클레임으로 종류를 구분하고 validateRefreshToken 을 제공한다.
refreshTokens() 메서드에는 "Access Token 을 Refresh 엔드포인트로 재사용하는 것을 차단합니다"
라는 주석까지 있는데, 컨트롤러가 그 메서드를 쓰지 않고 로직을 재구현하면서 약한 검증을 썼다.

뒤따르는 refreshTokenStore.isRegistered 가 2차 방어인데,
기본 설정이 jwt.refresh-token.store=none 이고 NoopRefreshTokenStore.isRegistered
무조건 true 를 반환한다. 즉 기본 프로파일에서 방어가 없다.

결과: 탈취한 1시간짜리 Access Token 을 30일짜리 Refresh Token 으로 교환할 수 있다.

✅ To Dos

  • validateTokenvalidateRefreshToken 으로 교정
  • 운영 프로파일의 jwt.refresh-token.store 기본값을 redis 로 (none 이면 로그아웃이 무작동이라 탈취 토큰을 회수할 수 없다)
  • Access Token 으로 갱신이 401 인지 확인하는 회귀 테스트

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions