我们最近注意到,我们的大量用户收到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个月前。
知道发生了什么事吗?