谷歌云端硬盘API交换授权代码有时会抛出500



使用此代码将来自云端硬盘界面的请求的初始代码与可用于发出 API 请求的令牌交换。

public GoogleCredential exchangeCode(String authorizationCode) throws CodeExchangeException {
        try {
            GoogleTokenResponse response = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(), CLIENT_ID, CLIENT_SECRET, authorizationCode, REDIRECT_URI).execute();
            return new GoogleCredential.Builder().setClientSecrets(CLIENT_ID, CLIENT_SECRET).setTransport(new NetHttpTransport()).setJsonFactory(new JacksonFactory()).build().setFromTokenResponse(response);
        }
        catch (Exception e) {
            log.error("An error occurred: " + e);
            throw new CodeExchangeException(null);
        }
    }

在大多数情况下它可以工作,但是在某些情况下(可能是 5%),我得到

An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 500 Error processing OAuth 2 request
<HTML>
<HEAD>
<TITLE>Error processing OAuth 2 request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Error processing OAuth 2 request</H1>
<H2>Error 500</H2>
</BODY>
</HTML>

可能是什么问题?

我得到"500 个内部服务器错误"到大约 0.5% 的 API 调用。我有一个重试机制,在第二次尝试时似乎总是成功。

    function doSomething(req) {
.
.
.
.
         restRequest.execute(function(resp) {
    var myResp = new Object();
    try {
        if (resp.error) {
            if (resp.error.code == "401") {
                do401(function() {
                    doSomething(req);
                }, req, myResp);
                return;
            }
            if (resp.error.code == "403") {
                cl("403 no auth " + resp.error.message);
                return;
            }
            if (resp.error.code == "500") {
                cl("server error 500, retrying " + resp.error.message);
                exponentialBackoff();
                                    doSomething(req);
                return;
            }
        }
    } catch (ex) {
        cl("[fg62] exception " + ex);
    }

这是由于在授权过程中(OAuth 2.0 服务器端流的身份验证代码交换)期间我们的 2 个内部服务器之间的超时引起的。我们在OAuth 2.0 Playground上也遇到了同样的问题。现在,谷歌的身份验证团队应该已经解决了这个问题。如果您再次遇到此问题,请告诉我们。

重试机制通常有助于解决您从云端硬盘 API 收到的暂时性 503 错误。但在这种情况下(来自 Auth 服务器的 500 个错误)它没有帮助,因为同一服务器配置中的相同用户(即远程地理区域中的用户和服务器)每次都会超时。

相关内容

最新更新