我在后端(java)上验证android的token如下:
GoogleIdTokenVerifier verifier =
new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new GsonFactory())
.setAudience(Collections.singletonList(googleClientAppID))
.build();
...
GoogleidToken idToken = verifier.verify(googleIdToken);
if (idToken == null) {
return false;
}
...
我得到false,意味着验证失败。
同时,在Android应用程序中,以下代码不会输入if语句:
GoogleSignInAccount glAccount =
GoogleSignIn.getLastSignedInAccount(getApplicationContext());
if (glAccount != null && glAccount.isExpired()) {
//com.google.api.auth2.getAuthInstance().currentUser.get().reloadAuthResponse();
glAccount = null;
}
因此令牌未过期。
在检查代码和它在Android应用程序中的作用后,检查是:
return zaf.currentTimeMillis() / 1000L >= this.zal - 300L;
这是可以的,没有过期,不管那些ZAF/ZAL值意味着什么。
现在后端检查是这样的(显示返回false的代码,使其过期):
this.verifyExpirationTime(currentTimeMillis, acceptableTimeSkewSeconds)
verifyExpirationTime执行以下操作:
return currentTimeMillis <= (this.getPayload().getExpirationTimeSeconds() + acceptableTimeSkewSeconds) * 1000L;
现在我想知道为什么它们不同?看起来令牌的有效负载包含以秒为单位的过期时间,表明令牌已过期。我做错了什么?
我已经检查了后端服务器上的时间,它的确定(正确)。
1条答案
按热度按时间wqlqzqxt1#
原来这是一个时间的问题,在Android模拟器上设置不正确。修复时间来纠正一个删除了这个问题。