OkHttp Interceptor ile Android'de JWT Jetonlarını Yenileyin

Feb 13 2023
Giriş Bu makalede, Retrofit kullanan bir Android uygulamasında JSON Web Simgelerini (JWT'ler) yenileme sürecini tartışacağız. JWT'ler, web ve mobil uygulamalarda kimlik doğrulama için yaygın olarak kullanılır.

giriiş

Bu yazıda Retrofit kullanarak bir Android uygulamasında JSON Web Simgelerini (JWT'ler) yenileme sürecini tartışacağız. JWT'ler, web ve mobil uygulamalarda kimlik doğrulama için yaygın olarak kullanılır. Taraflar arasında güvenli bilgi aktarımına izin verirler, ancak uygulamanın güvenliğini sağlamak için bunları düzenli olarak yenilemek önemlidir.

Bu makalede, Retrofit ve OkHttp kullanarak bir Android uygulamasında JWT yenileme işleminin nasıl uygulanacağını göstereceğim. Başlayalım.

Uygulamalı eğitimin tamamına buradan göz atın

Android projesinin ayarlanması

Öncelikle gerekli bağımlılıkları kurarak Android projesini kurmamız gerekiyor. Bunlara Retrofit, OkHttp ve bir JSON Web Token kitaplığı dahildir. Retrofit kullanarak Android projesinde ağ isteğini de yapılandıracağız.

Retrofit kitaplığını build.gradle dosyanıza nasıl kuracağınıza bir örnek:

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

Ardından, API isteklerimizin başlıklarına belirteç eklemek için bir OkHttp Interceptor oluşturacağız.

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

Şimdi, bu önleyiciyi ekleyeceğimiz bir OkHttp istemcisi oluşturacağız ve ardından Retrofit oluşturucumuza eklenecektir.

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

Her isteğimize jeton eklediğimiz için, jetonun olmadığı veya geçersiz olduğu durumlar olabilir ve istek 401 durum koduyla hata verir . Bu durumda jetonu yenilememiz, yerel depolamaya kaydetmemiz ve orijinal isteği tekrar yapın.

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

Çözüm

Android'de JWT belirteçlerini yenilemek, API çağrılarınızın güvenliğini sağlamak için çok önemlidir. OkHttp Interceptor kullanarak süreci otomatikleştirebilir ve zahmetsiz hale getirebilirsiniz. Umarım bu örnek, Android'de JWT belirteci yenilemenin uygulanmasını anlamanıza yardımcı olabilir ve sizi kendi projelerinize entegre etmek için gerekli becerilerle donatabilir.

LinkedIn ve Twitter'da bağlanalım !
Mutlu Kodlama!