无法检索oauth2的访问令牌

时间:2018-05-15 01:57:20

标签: ruby-on-rails google-api google-oauth google-developers-console adwords-api-v201802

我正在尝试获取Oauth2访问令牌以使用adwords api。我正在使用google-api-ads-ruby并尝试按照此处的说明https://github.com/googleads/google-api-ads-ruby/wiki/API-access-using-own-credentials-(installed-application-flow)。我有开发人员令牌,客户端ID,密码以及插入到adwords_api.yml中的所有其他信息。当我运行setup_oauth2.rb时,它显示如下:

Hit Auth error, please navigate to URL:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=309181******-lnbictq23g17o7pp3e6v7vdqq9juinv9.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/adwords
log in and type the verification code: 

正如文档所说,我在浏览器中复制并粘贴了网址,但我一直这样说:

enter image description here

我也尝试过选择'其他'来创建新的客户ID。而不是网络应用程序'。虽然网上很多人都说选择安装了应用程序,但是没有这样的选择。我看到的所有选项都是这样的:

enter image description here

我不知道有多少天我被困在这上面。如果您有任何建议,请提供任何建议。谢谢。

1 个答案:

答案 0 :(得分:1)

Oauth2的工作方式是它需要知道将身份验证返回到何处。这是通过定义重定向URI来完成的。

使用基于浏览器的应用程序,很容易知道应该在哪里返回身份验证。在这种情况下,它应该转到网站上用于处理认证服务器响应的页面。

安装的应用程序有点难,因为没有网站可以返回,因此无法知道确切的IP地址将其发送到哪里。在这种情况下,谷歌创建了两个可以使用的标准重定向uris。

urn:ietf:wg:oauth:2.0:oobhttp://localhost

您的错误说明

在您的情况下,如果您阅读错误消息,则表示您正在将本机重定向uri发送到浏览器客户端ID。

您的问题:

309181******-lnbictq23g17o7pp3e6v7vdqq9juinv9.apps.googleusercontent.com  <--- Web client id  
urn:ietf:wg:oauth:2.0:oob  <--- Redirect uri only allowed for native clients

<强>解决方案

返回Google开发人员控制台,找到您创建的本机(其他)客户端的客户端ID和客户端密码。您不能像现在这样使用urn:ietf:wg:oauth:2.0:oob浏览器客户端ID。

现在这真的取决于你在这做什么。如果您要在某个网站上发布此内容,那么将其作为浏览器客户端将其作为决定ID。在这种情况下,仅使用http://localhost进行重定向uri将解决您的问题。但是当你将它发布到生产网站时,你应该添加一个新的重定向uri。在我看来,允许生产客户端允许使用localhost是一个坏主意。

但这实际上取决于您打算如何使用此应用程序。