在Android中获得IdToken时的老孩子

时间:2017-09-05 12:10:29

标签: android google-signin google-authentication google-api-nodejs-client

我们最近注意到,我们的大量用户收到unauthorized request错误,无法与后端通信。

我们正在使用Google身份验证:

String scope = "audience:server:client_id:" + SERVER_CLIENT_ID;
String account = getAnyGoogleAccountFromDevice();
String idToken = GoogleAuthUtil.getToken(context, account, scope);

在服务器端,我们从以下网址获取Google的证书:https://www.googleapis.com/oauth2/v1/certs

并通过相应的IdToken(密钥IdToken)验证传入的kid

但是,我们看到很多用户向服务器发送旧的孩子值,这些值目前不会出现在Google证书列表中,例如:

2d067ddbe81104cefc208b560142c17f1324b625
2307d906764ed4557bab909b5b10b7f457a0964b
9c94eef5e68e95f5fb04cfd0b4e1378dd0daf239
a0eb736e47190f38e9251187676403e09aa8f9f0
2bc0aa0ebafce2ba831a08e64606039a4b126648
b23817bc1a7f6be1b4a75f77f2fb70d814c40ec7
d71bcfbf066fae5cd55d6f2fecea209af47a4407

快速搜索其中一个在线,似乎表明这些是有效的孩子价值观,但是陈旧,我在大约一个月或两个月前看过一些提及它们。

我们在向后端发送请求之前立即调用GoogleAuthUtil.getToken,因此我们不会以某种方式缓存此内容。

此外,我已经与一个似乎遇到此问题的用户交谈了,看来她正在使用的客户端通过一个旧的孩子值2d067ddbe81104cefc208b560142c17f1324b625生成令牌已经很长一段时间了,我们得到的json这个令牌在后端是:

{
  "header": {
    "alg": "RS256",
    "kid": "2d067ddbe81104cefc208b560142c17f1324b625"
  },
  "data": {
    "azp": "<redacted>.apps.googleusercontent.com",
    "aud": "<redacted>.apps.googleusercontent.com",
    "sub": "<redacted>",
    "email": "<redacted>",
    "email_verified": true,
    "iss": "accounts.google.com",
    "iat": 1497414898,
    "exp": 1497418498
  },
  "isAuthentic": null,
  "isExpired": false
}

您可以看到exp时间戳是2017年6月14日,2.5个月前。

知道发生了什么事吗?

0 个答案:

没有答案