Làm mới mã thông báo JWT trong Android bằng OkHttp Interceptor
Giới thiệu
Trong bài viết này, chúng ta sẽ thảo luận về quá trình làm mới JSON Web Tokens (JWT) trong một ứng dụng Android bằng cách sử dụng Retrofit. JWT được sử dụng rộng rãi để xác thực trong các ứng dụng web và di động. Chúng cho phép truyền thông tin an toàn giữa các bên, nhưng điều quan trọng là phải làm mới chúng thường xuyên để duy trì tính bảo mật của ứng dụng.
Trong bài viết này, tôi sẽ chỉ cho bạn cách triển khai quy trình làm mới JWT trong ứng dụng Android bằng cách sử dụng Retrofit và OkHttp. Bắt đầu nào.
Kiểm tra hướng dẫn thực hành đầy đủ tại đây
Thiết lập dự án Android
Trước tiên, chúng ta cần thiết lập dự án Android bằng cách cài đặt các phụ thuộc cần thiết. Chúng bao gồm trang bị thêm, OkHttp và thư viện JSON Web Token. Chúng tôi cũng sẽ định cấu hình yêu cầu mạng trong dự án Android bằng cách sử dụng Retrofit.
Đây là một ví dụ về cách cài đặt thư viện Retrofit trong tệp build.gradle của bạn:
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()
Tiếp theo, chúng tôi sẽ tạo một Công cụ chặn OkHttp để thêm mã thông báo vào tiêu đề của các yêu cầu API của chúng tôi.
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)
}
}
Bây giờ, chúng tôi sẽ tạo một ứng dụng khách OkHttp mà chúng tôi sẽ thêm thiết bị chặn này và sau đó nó sẽ được thêm vào trình tạo Trang bị thêm của chúng tôi.
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()
}
Vì chúng tôi đã thêm mã thông báo vào từng yêu cầu của mình nên có thể xảy ra trường hợp mã thông báo không có hoặc mã thông báo không hợp lệ và yêu cầu đưa ra lỗi với mã trạng thái 401. Trong trường hợp đó, chúng tôi cần làm mới mã thông báo, lưu mã vào bộ nhớ cục bộ và thực hiện lại yêu cầu ban đầu.
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)
}
}
Phần kết luận
Làm mới mã thông báo JWT trong Android là rất quan trọng để đảm bảo tính bảo mật cho lệnh gọi API của bạn. Bằng cách sử dụng OkHttp Interceptor, bạn có thể tự động hóa quy trình và khiến nó trở nên dễ dàng. Tôi hy vọng ví dụ này có thể giúp bạn hiểu việc triển khai làm mới mã thông báo JWT trong Android và trang bị cho bạn những kỹ năng cần thiết để tích hợp nó vào các dự án của riêng bạn.
Hãy kết nối trên LinkedIn và Twitter !
Mã hóa vui vẻ!

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































