0

我正在尝试获取一个简单的 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 的开发服务器(1.7.7)上运行得非常好。我最终得到了一个不错的 clientLoginToken。

但是,在生产中,我总是得到 403 Forbidden(或 403 OK,无论如何),而且我永远无法检索到 clientLoginToken(ClientLoginResponseException:403)。我的应用当前在http://APP.appspot.com域(默认 AppEngine 生产 URL)上运行。

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

任何提示表示赞赏。谢谢!

4

1 回答 1

0

原来这是 Google ClientLogin 的一个安全“功能”。

AppEngine 的服务器分布在世界各地 - Google 确保没有人窃取您的帐户凭据。默认情况下(以及一些未知的指标)Google 会阻止不是来自您的“计算机”(或我猜的区域)对您帐户的访问。

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

https://accounts.google.com/DisplayUnlockCaptcha

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

于 2013-04-16T12:34:40.303 回答