Java 从Appengine获取Google ClientLogin令牌时始终禁止403

Java 从Appengine获取Google ClientLogin令牌时始终禁止403,java,google-app-engine,google-ads-api,Java,Google App Engine,Google Ads Api,我正在尝试获取一个简单的ClientLogin令牌 我的代码如下所示: UrlFetchTransport urlFetchTransport = new UrlFetchTransport(); ClientLoginTokens clientLoginTokens = new ClientLoginTokens.Builder() .forApi(ClientLoginTokens.Api.ADWORDS) .withHttpTransport(urlFetchTransp

我正在尝试获取一个简单的ClientLogin令牌

我的代码如下所示:

UrlFetchTransport urlFetchTransport = new UrlFetchTransport();

ClientLoginTokens clientLoginTokens = new ClientLoginTokens.Builder()
    .forApi(ClientLoginTokens.Api.ADWORDS)
    .withHttpTransport(urlFetchTransport)
    .withEmailAndPassword(email, password)
    .build();

String clientLoginToken = clientLoginTokens.requestToken();
代码在我的本地机器和AppEngine的devserver(1.7.7)上运行得非常好。我最终得到了一个很好的客户

然而,在生产过程中,我总是得到一个403禁止(或403 OK,无论这意味着什么),我永远无法检索clientLoginToken(ClientLoginResponseException:403)。我的应用程序当前正在域上运行(默认AppEngine生产url)

我已经尝试使用默认传输而不是UrlFetchTransport,但这并没有改变任何事情——它在本地运行,但在AppEngine上运行时失败


任何提示,不胜感激。谢谢

这是谷歌ClientLogin的一项安全“功能”

AppEngine的服务器分布在世界各地,谷歌确保没有人窃取你的帐户凭证。默认情况下(还有一些未知的指标),谷歌会阻止对你账户的访问,而这些访问不是来自你的“计算机”(或者我猜是来自某个领域)

您可以通过访问添加其他应用程序:

输入凭据后,您有10分钟的时间“添加”另一个应用程序的访问权限。这为我解决了问题。但是当然,使用OAuth2.0更好,因为它没有这些问题