Java 中的 Adwords API、OAuth2 和服务帐户

Posted

技术标签:

【中文标题】Java 中的 Adwords API、OAuth2 和服务帐户【英文标题】:Adwords API, OAuth2 and service account in Java 【发布时间】:2013-04-10 09:30:51 【问题描述】:

我已切换到 OAuth2 身份验证来访问 Adwords API。我想使用服务帐户,因为我们的应用程序没有用户交互。因此,我在 Google API 控制台中为 mcc 帐户创建了一个服务帐户。并使用:

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(new NetHttpTransport())
.setJsonFactory(new JacksonFactory())
.setServiceAccountId("..@developer.gserviceaccount.com")
.setServiceAccountScopes("https://adwords.google.com/api/adwords/")
.setServiceAccountPrivateKeyFromP12File(file)
.setServiceAccountUser("<MCC Account Email")
.build();

创建凭据。

当我现在尝试进行 API 调用或只是调用 credential.refreshToken() 时,我得到:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request

  "error" : "access_denied"

at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:303)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:323)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:345)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:526)

..

谁能告诉我,我做错了什么或错过了什么?

【问题讨论】:

【参考方案1】:

不能从您发布的代码中说,我在我的应用程序中使用完全相同的方式并且一切正常。

我的 jar 版本是:

 google-api-services-oauth2-v2-rev9-1.7.2-beta.jar
 google-http-client-1.12.0-beta.jar
 google-oauth-client-1.12.0-beta.jar

如果您没有想法,请尝试更改 oauth2 库的版本。

【讨论】:

您使用哪些adwords Api?我使用: com.google.api-adsads-lib1.14.1 com.google.api-adsadwords-axis1.14.1com.google.http-client groupId> google-http-client-jackson21.14.1-beta 我没有使用 adwords API。尝试加载一些其他信息,例如用户联系人或 google drive 文档以检查它是否是所有 API 的特定 adwords 问题或身份验证问题。

以上是关于Java 中的 Adwords API、OAuth2 和服务帐户的主要内容,如果未能解决你的问题,请参考以下文章

使用 OAuth 创建 google adwords API 应用程序

Google Adwords API 错误 - OAuth 客户端已删除

如何将 OAuth 与 Google AdWords / AdSense API 一起使用?

最新的 Google Adwords oAuth API 实施

“Invalid_client”为 Adwords API 生成 oAuth2 令牌

使用 suds 在 Python 中使用 OAuth2 进行 Google Adwords API 身份验证