Odśwież tokeny JWT w Androidzie za pomocą OkHttp Interceptor
Wstęp
W tym artykule omówimy proces odświeżania tokenów JSON Web Token (JWT) w aplikacji na Androida przy użyciu Retrofit. JWT są szeroko stosowane do uwierzytelniania w aplikacjach internetowych i mobilnych. Pozwalają one na bezpieczną transmisję informacji pomiędzy stronami, ale ważne jest ich regularne odświeżanie, aby zachować bezpieczeństwo aplikacji.
W tym artykule pokażę, jak zaimplementować proces odświeżania JWT w aplikacji na Androida przy użyciu Retrofit i OkHttp. Zacznijmy.
Zapoznaj się z pełnym samouczkiem praktycznym tutaj
Konfigurowanie projektu Android
Najpierw musimy skonfigurować projekt Androida, instalując niezbędne zależności. Należą do nich Retrofit, OkHttp i biblioteka JSON Web Token. Skonfigurujemy również żądanie sieciowe w projekcie Android za pomocą Retrofit.
Oto przykład instalacji biblioteki Retrofit w pliku 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()
Następnie utworzymy OkHttp Interceptor, aby dodać token w nagłówkach naszych żądań 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)
}
}
Teraz utworzymy klienta OkHttp, do którego dodamy ten interceptor, a następnie zostanie on dodany do naszego konstruktora 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()
}
Ponieważ dodaliśmy tokeny do każdego żądania, może się zdarzyć, że tokena nie ma lub jest nieprawidłowy, a żądanie zgłasza błąd z kodem statusu 401. W takim przypadku musimy odświeżyć token, zapisać go w lokalnym magazynie i złóż pierwotne żądanie ponownie.
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)
}
}
Wniosek
Odświeżanie tokenów JWT w Androidzie jest kluczowe dla zapewnienia bezpieczeństwa wywołań API. Korzystając z OkHttp Interceptor, możesz zautomatyzować ten proces i uczynić go bezproblemowym. Mam nadzieję, że ten przykład pomoże Ci zrozumieć implementację odświeżania tokena JWT w Androidzie i wyposaży Cię w umiejętności niezbędne do zintegrowania go z własnymi projektami.
Połączmy się na LinkedIn i Twitterze !
Szczęśliwego kodowania!

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































