我正在尝试获取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:
正如文档所说,我在浏览器中复制并粘贴了网址,但我一直这样说:
我也尝试过选择'其他'来创建新的客户ID。而不是网络应用程序'。虽然网上很多人都说选择安装了应用程序,但是没有这样的选择。我看到的所有选项都是这样的:
我不知道有多少天我被困在这上面。如果您有任何建议,请提供任何建议。谢谢。
答案 0 :(得分:1)
Oauth2的工作方式是它需要知道将身份验证返回到何处。这是通过定义重定向URI来完成的。
使用基于浏览器的应用程序,很容易知道应该在哪里返回身份验证。在这种情况下,它应该转到网站上用于处理认证服务器响应的页面。
安装的应用程序有点难,因为没有网站可以返回,因此无法知道确切的IP地址将其发送到哪里。在这种情况下,谷歌创建了两个可以使用的标准重定向uris。
urn:ietf:wg:oauth:2.0:oob和http://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是一个坏主意。
但这实际上取决于您打算如何使用此应用程序。