使用Google凭据对象获取Google用户的jwt访问令牌时的错误响应

时间:2017-06-16 12:11:41

标签: google-api jwt access-token google-api-client gsuite

我正在尝试使用GoogleCredential和JacksonFactory库为我的gsuite域的每个用户获取jwt访问令牌。

代码示例 -

GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId(clientEmail)
                .setServiceAccountScopes(scopes)
                .setServiceAccountPrivateKeyFromP12File(privateKeyFile)
                .setServiceAccountUser(userEmail)
                .build();

            credential.refreshToken();
            String accessToken = credential.getAccessToken();

所有字段 - clientEmail,scopes,key和userEmail既不为null也不为空

对于少数用户,我无法获取访问令牌并收到此错误

com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191) com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127) com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:96) com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85) com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81) com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:88) com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269) com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) com.hubble.hubbleEngine.policyTypes.OAuth.getJWTAccessToken(OAuth.java:815)

这是第一次发生,我正在尝试获取访问令牌。当我尝试再次为所有用户获取访问令牌时,我能够为第一次抛出错误的用户获取访问令牌。

我调试了一下,看到错误是从com.google.api.client.auth.oauth2.TokenRequest

中的以下函数生成的。
public final HttpResponse executeUnparsed() throws IOException {
// must set clientAuthentication as last execute interceptor in case it needs to sign request
HttpRequestFactory requestFactory =
    transport.createRequestFactory(new HttpRequestInitializer() {

      public void initialize(HttpRequest request) throws IOException {
        if (requestInitializer != null) {
          requestInitializer.initialize(request);
        }
        final HttpExecuteInterceptor interceptor = request.getInterceptor();
        request.setInterceptor(new HttpExecuteInterceptor() {
          public void intercept(HttpRequest request) throws IOException {
            if (interceptor != null) {
              interceptor.intercept(request);
            }
            if (clientAuthentication != null) {
              clientAuthentication.intercept(request);
            }
          }
        });
      }
    });
// make request
HttpRequest request =
    requestFactory.buildPostRequest(tokenServerUrl, new UrlEncodedContent(this));
request.setParser(new JsonObjectParser(jsonFactory));
request.setThrowExceptionOnExecuteError(false);
HttpResponse response = request.execute();
if (response.isSuccessStatusCode()) {
  return response;
}
throw TokenResponseException.from(jsonFactory, response);

}

request.execute()命中“https://accounts.google.com/o/oauth2/token”以获取令牌,但它会抛出一些错误响应。因此,它会抛出最后提到的TokenResponseException。这里,response.getContent()为null,因此发生了整个null异常。

有没有办法知道调用引发了哪种错误响应。 (&gt; 300或<200)?或者为什么会出现这种情况?

0 个答案:

没有答案