[Android] Ktor에서 RefreshToken 처리

2025. 8. 18. 16:20·Android

Ktor에서 AccessToken 갱신하는 법은 많이 올라와있다.

 

하지만 내가 궁금했던건 RefreshToken마저 만료되어 토큰 갱신에 실패했을때 였는데.. 별로 정보를 못봤다.

 

문제

Ktor에서 Auth 모듈을 install 하면 토큰 갱신 처리를 쉽게 할 수 있다.

근데 RefreshToken마저 만료되어 토큰 갱신에 실패했을때의 동작이 이상했다.

토큰 갱신에 실패하면 서버는 다시 401을 보내주고 있는데, 다시 401을 받으면 흐름은 거기서 끝나버리고 원래 api를 호출했던 곳으로 아무런 결과가 전달되지 않는다..

 

예를 들어

1. 만료된 accessToken으로 프로필 조회 api 호출

2. api 호출의 결과로 401을 받음

3. 토큰 갱신 로직이 동작하면서 만료된 refreshToken으로 토큰 갱신 api 호출

4. 토큰 갱신 api 호출의 결과로 401을 받음

5. 프로필 조회 api 호출한 곳으로 아무 결과도 전달이 안됨..

6. 프로필 조회 api 호출한 곳은 api 호출이 아직도 진행중인지 끝났는지도 알수가 없음..

 

두번째로 발생한 401 에러는 `refreshTokens` 코드 블럭 안에서 잡히지도 않고,

다른 에러를 잡는 방법으로도 잡히지가 않았다.

markAsRefreshTokenRequest()

`refreshTokens` 코드 내부를 보니 `markAsRefreshTokenRequest()`라는 메서드가 있었다.

해당 api 호출을 토큰 갱신을 위한 호출로 마킹을 해서 special handling을 한다고 한다.

 

refreshTokens {

    val httpResponse = client.get("토큰 갱신 url") {
    	// ...refreshToken set...
        
        markAsRefreshTokenRequest()
    }
    
    if (httpResponse.status == HttpStatusCode.Unauthorized) {
        throw Exception("토큰 갱신 실패!!!")
    }
    
    // ...
}

 

저 마킹을 하고 테스트를 해보니, RefreshToken이 만료되었을 때 아래 `if`문에서 두번째 401 에러가 잡혔다.

그리고 `throw`한 `Exception`은 api를 호출한 곳으로 전달이 잘 되었다.

 

해결~

'Android' 카테고리의 다른 글

[Android] 수제 ImageViewer(feat. Coil) (Compose)  (1) 2025.06.12
[Android] 멀티모듈에서 gradle의 BuildType 공통화  (2) 2025.06.12
[Android] java.lang.ClassCastException  (0) 2025.06.12
[Android] Compose TextField 커스텀  (2) 2025.06.12
[Android] LazyColumn안에 LazyVerticalGrid 넣기(nested scroll)  (0) 2025.06.12
'Android' 카테고리의 다른 글
  • [Android] 수제 ImageViewer(feat. Coil) (Compose)
  • [Android] 멀티모듈에서 gradle의 BuildType 공통화
  • [Android] java.lang.ClassCastException
  • [Android] Compose TextField 커스텀
th.k
th.k
dev-thk 님의 블로그 입니다.
  • th.k
    dev-thk 님의 블로그
    th.k
  • 전체
    오늘
    어제
    • 분류 전체보기 (9)
      • Android (8)
      • Kotlin (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

    • Contact
  • 인기 글

  • 태그

    Kotlin
    retrofit2
    gradle
    RecyclerView
    Java
    Flow
    Compose
    Android
    ktor
    ListAdapter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
th.k
[Android] Ktor에서 RefreshToken 처리
상단으로

티스토리툴바