Google OAuth 令牌验证 URL returns 相同代码工作几天后出现 HTTP 错误 400

Google OAuth Token validation URL returns HTTP error 400 after same code worked for few days

这是在 Tomcat 上运行的代码,它工作了大约 10 天,其中多个用户可以使用 OAuth 20 SSO 登录,之后它从 Google 获得 HTTP 400 响应:(https://accounts.google.com/o/oauth2/token)

请指出可能遗漏的内容:

CloseableHttpClient httpclient = HttpClientBuilder.create().build();

        HttpUriRequest post = RequestBuilder.post(data.getOauthTokenURI())
      .addParameter("code", code)
            .addParameter("grant_type", "authorization_code")
            .addParameter("client_id", data.getOauthClientId())
            .addParameter("client_secret", data.getOauthClientSecretDec())
            .addParameter("redirect_uri", data.getOauthRedirectURI())
      .build();

        String postResponseBody = null;
  CloseableHttpResponse httpResponse = null;
        try {
            httpResponse = httpclient.execute(post);
    int httpCode = httpResponse.getStatusLine().getStatusCode();

摘要:

2015 年 12 月 7 日星期一,1.29% 的 Google App Engine 应用程序在 17 小时 3 分钟内向 Google API 发出经过身份验证的调用时收到错误。在 45 分钟内,从 App Engine 外部对 Google API 的经过身份验证的调用也收到错误,错误率达到 12% 的峰值。对于此问题对您和您的服务造成的影响,我们深表歉意。我们认为这种级别和持续时间的服务退化非常严重,我们正在计划进行许多更改以防止将来再次发生这种情况。

影响的详细说明:

太平洋标准时间 2015 年 12 月 7 日星期一 20:09 到 2015 年 12 月 8 日星期二 13:12,使用服务帐户的 Google App Engine 应用程序中有 1.29% 收到错误 401 "Access Denied"所有对 Google API 的请求都需要身份验证。未经身份验证的 API 调用不受影响。不同的应用程序在不同的时间受到影响,只有少数应用程序在事件的整个持续时间内受到影响。

此外,在 23:05 和 23:50 之间,对 Google Cloud API 的所有请求中平均有 7% 失败或超时,短暂达到峰值12%。在此时间之外,只有 API 来自 App Engine 的调用受到影响。

根本原因:

Google 工程师最近将 Google 帐户系统迁移到新的存储后端,其中包括复制 API 身份验证服务凭证数据和重定向 API 调用新后端。

为完成此迁移,计划从以前的存储后端删除凭据。此过程于 2015 年 12 月 7 日星期一太平洋标准时间 20:09 开始。由于软件错误,API 身份验证服务继续查找一些凭据,包括 Google App Engine 服务帐户使用的凭据,在旧的存储后端。随着这些凭据被逐步删除,它们相应的服务帐户将无法再通过身份验证。

随着越来越多的凭据被删除并且一些 Google App Engine 应用程序开始发出大量重试请求,影响越来越大。在 23:05,重试量超过了 API 身份验证服务的区域容量,导致所有经过身份验证的 API 调用失败或超时的 1.3%,包括 Google API 从 Google App Engine 外部调用。在 23:30,API 身份验证服务超出了其全球容量,导致所有经过身份验证的 API 调用中多达 12% 失败,直到 23:50 过载问题得到解决。