首页 > 解决方案 > 无法检索 oauth2 的访问令牌

问题描述

我正在尝试获取 Oauth2 访问令牌以使用 adwords api。我正在使用 google-api-ads-ruby 并尝试按照此处的说明进行操作,https://github.com/googleads/google-api-ads-ruby/wiki/API-access-using-own-credentials- (已安装-应用程序流)。我在 adwords_api.yml 中插入了开发人员令牌、客户端 ID、密码和所有其他信息。当我运行 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: 

所以正如文件所说,我在浏览器中复制并粘贴了网址,但我一直得到这个:

在此处输入图像描述

我还尝试通过选择“其他”而不是“Web 应用程序”来创建新的客户端 ID。虽然网上很多人说选择“已安装的应用程序”,但没有这样的选项。我看到的所有选项都只有这个:

在此处输入图像描述

我不知道我被困了多少天。如果您有任何建议,请提供任何建议。谢谢你。

标签: ruby-on-railsgoogle-apigoogle-oauthgoogle-developers-consolegoogle-ads-api

解决方案


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

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

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

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 是一个坏主意。

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


推荐阅读