Aggiorna i token JWT in Android con OkHttp Interceptor

Feb 13 2023
Introduzione In questo articolo, discuteremo il processo di aggiornamento dei token Web JSON (JWT) in un'app Android utilizzando Retrofit. I JWT sono ampiamente utilizzati per l'autenticazione nelle applicazioni Web e mobili.

introduzione

In questo articolo, discuteremo il processo di aggiornamento dei token Web JSON (JWT) in un'app Android utilizzando Retrofit. I JWT sono ampiamente utilizzati per l'autenticazione nelle applicazioni Web e mobili. Consentono la trasmissione sicura delle informazioni tra le parti, ma è importante aggiornarle regolarmente per mantenere la sicurezza dell'applicazione.

In questo articolo, ti mostrerò come implementare un processo di aggiornamento JWT in un'app Android utilizzando Retrofit e OkHttp. Iniziamo.

Dai un'occhiata al tutorial pratico completo qui

Configurazione del progetto Android

Innanzitutto, dobbiamo configurare il progetto Android installando le dipendenze necessarie. Questi includono Retrofit, OkHttp e una libreria JSON Web Token. Configureremo anche la richiesta di rete nel progetto Android utilizzando Retrofit.

Ecco un esempio di come installare la libreria Retrofit nel file 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()

Successivamente, creeremo un OkHttp Interceptor per aggiungere token nelle intestazioni delle nostre richieste 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)
    }
}

Ora creeremo un client OkHttp a cui aggiungeremo questo intercettore e quindi verrà aggiunto al nostro generatore 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()
}

Poiché abbiamo aggiunto token a ciascuna delle nostre richieste, potrebbe verificarsi il caso in cui il token non è presente o non è valido e la richiesta genera un errore con codice di stato 401. In tal caso, è necessario aggiornare il token, salvarlo nella memoria locale e ripetere la richiesta originaria.

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)
    }
}

Conclusione

L'aggiornamento dei token JWT in Android è fondamentale per garantire la sicurezza delle chiamate API. Utilizzando OkHttp Interceptor, puoi automatizzare il processo e renderlo semplice. Spero che questo esempio possa aiutarti a comprendere l'implementazione dell'aggiornamento del token JWT in Android e fornirti le competenze necessarie per integrarlo nei tuoi progetti.

Connettiamoci su LinkedIn e Twitter !
Buona codifica!