Atualizar tokens JWT no Android com OkHttp Interceptor

Feb 13 2023
Introdução Neste artigo, discutiremos o processo de atualização de JSON Web Tokens (JWTs) em um aplicativo Android usando o Retrofit. Os JWTs são amplamente usados ​​para autenticação em aplicativos da Web e móveis.

Introdução

Neste artigo, discutiremos o processo de atualização de JSON Web Tokens (JWTs) em um aplicativo Android usando o Retrofit. Os JWTs são amplamente usados ​​para autenticação em aplicativos da Web e móveis. Eles permitem a transmissão segura de informações entre as partes, mas é importante atualizá-los regularmente para manter a segurança do aplicativo.

Neste artigo, mostrarei como implementar um processo de atualização JWT em um aplicativo Android usando Retrofit e OkHttp. Vamos começar.

Confira o tutorial prático completo aqui

Configurando o projeto Android

Primeiro, precisamos configurar o projeto Android instalando as dependências necessárias. Isso inclui Retrofit, OkHttp e uma biblioteca JSON Web Token. Também configuraremos a solicitação de rede no projeto Android usando o Retrofit.

Aqui está um exemplo de como instalar a biblioteca Retrofit em seu arquivo build.gradle:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'

val retrofit = Retrofit.Builder()
                .baseUrl("https://api.example.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build()

Em seguida, criaremos um OkHttp Interceptor para adicionar token nos cabeçalhos de nossas solicitações de API.

class AuthInterceptor: Interceptor {

    override fun intercept(chain: Chain): Response {
        val token = getFromStorage()
        val request = chain.request()
        if (token.isNullOrEmpty()) {
           val newRequest = request
                .newBuilder()
                .header("Authorization", "Bearer $token")
                .build()
           return chain.proceed(newRequest)
        }
        return chain.proceed(request)
    }
}

Agora, criaremos um cliente OkHttp ao qual adicionaremos este interceptor e, em seguida, ele será adicionado ao nosso construtor Retrofit.

private fun getRetrofit(): Retrofit {

    val authInterceptor = AuthInterceptor()

    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(authInterceptor)
        .build()

    return Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClient)
        .build()
}

Como adicionamos tokens a cada solicitação, pode haver casos em que o token não esteja presente ou seja inválido e a solicitação gere um erro com o código de status 401. Nesse caso, precisamos atualizar o token, salvá-lo no armazenamento local e fazer o pedido original novamente.

class AuthInterceptor: Interceptor {

   private fun refreshToken():Response {
        // make an API call to get new token
        return if (response.isSuccessful) {
            val token = response.body()?.token
            saveTokenToLocalStorage(token)

            val newRequest = request
                .newBuilder()
                .header("Authorization", "Bearer $token")
                .build()
            chain.proceed(newRequest)
        } else {
            chain.proceed(request)
        }
    }

    override fun intercept(chain: Chain): Response {
        val token = getFromStorage()
        val request = chain.request()
        if (token.isNullOrEmpty()) {
           val newRequest = request
                .newBuilder()
                .header("Authorization", "Bearer $token")
                .build()
           val response = chain.proceed(newRequest)
           return if (response.code() == 401) {
               refreshToken()
           } else {
               response
           }
        } else {
          refreshToken()
        }
        return chain.proceed(request)
    }
}

Conclusão

A atualização de tokens JWT no Android é crucial para garantir a segurança de suas chamadas de API. Ao usar o OkHttp Interceptor, você pode automatizar o processo e torná-lo fácil. Espero que este exemplo possa ajudá-lo a entender a implementação da atualização do token JWT no Android e equipá-lo com as habilidades necessárias para integrá-lo em seus próprios projetos.

Vamos nos conectar no LinkedIn e no Twitter !
Codificação feliz!