我正在使用Oauth2令牌系统来访问我的Android应用程序的REST API.我在客户端的令牌刷新部分遇到了一些问题.
这里是流:我的应用程序发出请求(在参数的访问令牌)的服务器由于一些的AsyncTask( PostCommentAsyncTask(),AddFriendAsyncTask()等...),所以如果是的accessToken有效这是确定的,但如果它已过期我调用另一个AsyncTask (GetRefreshTokenAsyncTask())从onPostExecute()先例的方法AsyncTask获得新的accessToken.这对我来说是棘手的部分.当我获得新的访问令牌时,我想重新执行对服务器的初始AsyncTask请求.我无法弄清楚如何正确地做到这一点.
example1:
请求PostCommentAsyncTask()- >(acessToken已过期) - > GetRefreshTokenAsyncTask()- >请求PostCommentAsyncTask()- >(好令牌) - >好的
编辑:
我最终选择使用该Volley库(不再需要使用Asynctask).在我使用时,JSON Web Token我可以检查在令牌的有效负载中编码的过期日期.
以下是在isAccessTokenExpired()向服务器发出请求之前检查访问令牌是否未过期的方法:
public Boolean isAccessTokenExpired(String accessToken){
String[] accessTokenPart = accessToken.split("\\.");
String header =accessTokenPart[0];
String payload =accessTokenPart[1];
String signature =accessTokenPart[2];
try {
byte[] decodedPayload = Base64.decode(payload, Base64.DEFAULT);
payload = new String(decodedPayload,"UTF-8");
} catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
JSONObject obj = …Run Code Online (Sandbox Code Playgroud)