当我的应用程序的访问令牌过期时,我使用刷新令牌通过Authenticator类获取新的访问令牌。
我的代码如下:
if (response.code() == 401) {
Log.d("refresh", "Access token expired")
val webservice: Webservice = RetrofitClient.makeRetrofitService().create(Webservice::class.java)
var refreshToken = PreferenceData.getUserLoggedInRefreshToken(App.GetContext()!!)
var map = generateRequestBody(mapOf("refreshToken" to refreshToken!!))
var refreshResponse = webservice.refreshToken(map).execute()
if (refreshResponse != null && refreshResponse.code() == 200) {
Log.d("refresh", "New access token received")
var newToken = (refreshResponse.body() as UserLogin).token
var refreshToken = (refreshResponse.body() as UserLogin).refreshToken
PreferenceData.setUserLoggedInAccessToken(App.GetContext()!!, newToken)
PreferenceData.setUserLoggedInRefreshToken(App.GetContext()!!, refreshToken)
return response.request().newBuilder()
.header("Authorization", "Bearer $newToken")
.build();
}
}
到现在为止还挺好。我现在要做的是当我的刷新令牌过期时,我想将用户重定向到应用程序的登录屏幕。但我的问题是,当我打电话时
var refreshResponse = webservice.refreshToken(map).execute()
服务器也返回401.所以我的问题是我无法判断我收到的401是由于访问令牌过期还是刷新令牌过期。什么是最适合处理这个问题的方法?
谢谢!
你可以看一下AppAuth-Android的实现。
clock.getCurrentTimeMillis()
的结果进行比较。/token
端点将返回following error:HTTP / 1.1 400错误请求{“错误”:“invalid_request”}
希望它能帮到你。