Landroid

[Android] Interceptor로 토큰 갱신하기 본문

안드로이드

[Android] Interceptor로 토큰 갱신하기

silso 2021. 4. 14. 09:43

 

보통 토큰을 사용하기 위해서

Access 토큰이 리소스에 접근하고

Refresh 토큰이 Access 토큰을 갱신하도록 만들어야 합니다.

 

 

Refresh로 토큰을 갱신하는 방법 중에는 Workmanager나 Interceptor 등이 있는데

이번 시간에는 Interceptor로 토큰을 갱신하는 방법을 알아보겠습니다.

 

 

Interceptor란?

우리가 클라이언트와 서버 사이에서 통신을 합니다. interceptor 해당 네트워크 통신을 하는 중간에 요청과 응답을 보내거나 받거나 간섭하는 역할을 수행합니다.

 

TMI

interceptor에는 크게 두 가지가 있는데, Application Interceptor와 Network Interceptor가 있습니다.

 

 

Interceptor로 응답 확인

internal class AuthInterceptor : Interceptor {

  override fun intercept(chain: Interceptor.Chain): Response { .... }
  
  ....
}

 

Interceptor는 인터페이스로 내부에 intercept라는 메서드를 포함하고 있습니다.

그리고 우리는 intercept라는 녀석을 가지고 요청과 응답 정보를 확인할 수 있습니다.

 

 

다시 돌아와서 refresh 토큰으로 access 토큰이 갱신되려면

먼저 access 토큰이 만료가 되야겠죠? access 토큰이 만료해서 401 에러를 일으킨다고 가정하면

intercept에서 응답이 401일 때 refresh 토큰으로 access 토큰이 갱신하시면 되겠습니다.

 

 

이제 이걸 코드로 나타내면 다음과 같습니다.

override fun intercept(chain: Interceptor.Chain): Response { 
	val request = chain.request();
    val response = chain.proceed(request);
    
    when (response.code()) {
            400 -> {
                //Show Bad Request Error Message
            }
            401 -> {
                //Show UnauthorizedError Message
            }

            403 -> {
                //Show Forbidden Message
            }

            404 -> {
                //Show NotFound Message
            }

            // ... and so on

        }
        return response
}

 

 

이렇게 만들어주셨으면은 이제 OkHttpClient에 addIntercept로 추가해주시면 됩니다.

val builder = OkHttpClient().newBuilder()
        .addInterceptor(AuthInterceptor())

 

참 쉽죠?

 

 

 

 

Reference

 

OkHttp Interceptor - Making the most of it

In this blog, we will learn how to work with the OkHttp Interceptors. We will also see the real use cases where we can use it and how we can use it to get the most of it. In Android, we have so many use-cases that can be done using the OkHttp Interceptors.

blog.mindorks.com

Comments