Google Marketplace 应用安装后立即出现“401 Unauthorized”错误,但随后有效

Getting "401 Unauthorized" error immediately after Google Marketplace app install, but then works

最近,当用户从 Google Apps Marketplace 安装我的 Google 应用程序时,我开始遇到问题。

一旦安装了应用程序并且用户单击 "Launch app" 按钮重定向到我的网站,我就会检查用户是否是管理员。这需要使用 OAuth2 连接到 Google 目录 API。

如果我在 "Launch app" 按钮出现时立即单击它,我将在尝试验证用户时收到来自 Google 的“401 未经授权”响应。但是如果我在点击之前等待几秒钟,一切正常。

我尝试通过添加 5 秒的延迟并在第一次尝试失败时重试来解决此问题。这在很多情况下都有效,但我仍然能够重现错误。

我可以再等5秒再试,但这当然不是一个理想的解决方案。有更好的方法吗?

我是 运行 google api java 客户端的 1.20.0 版。

这是我得到的堆栈跟踪:

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384) ~[google-api-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at ... my code

如您所见,我是 运行 refreshToken() 方法。我这样做是为了验证连接是否有效。

这种滞后现象似乎相当普遍,并不是您的任何过错造成的。最好的解决方法可能是在您的应用程序中有一些重试逻辑,以便您可以处理这种情况。