错误:invalid_request 需要提供设备ID和设备名称以获取私有IP。

43

我一直在使用Google Drive API进行开发,使用的是[localhost:8080]。突然间我想在本地调试环境中进行测试,我的本地部署沙箱有一个IP地址为[192.168.1.1:8080]。因此,我在开发者控制台客户端回调URL中更改了凭据。我使用OAuth2WebServerFlow获取用户同意后的刷新令牌。然后在未来,我将使用该刷新令牌和OAuth2WebServerFlow对用户进行身份验证。但是,我很惊讶——我收到了以下错误:

  1. That’s an error. Error: invalid_request device_id and device_name are required for private IP:

我不知道发生了什么或者如何解决这个问题。我不理解现在发生了什么。


1
看起来这个线程 https://dev59.com/YmEh5IYBdhLWcg3wPhZT 有相同的问题。 - phenomenon.aurora
有人知道这个的解决方法吗?请分享一下。 - phenomenon.aurora
嗨,感谢您的编辑,我也在等待是否有人分享一些关于这个问题的知识。 - phenomenon.aurora
看起来这个问题是API已知的未解决的错误。我仍然在寻找一些提示,以了解这个问题是什么。 - phenomenon.aurora
我在https://dev59.com/-Gkv5IYBdhLWcg3w_Vmn?s=134cbffe-f268-4d1f-a8f7-1843196370ad中找到了一个类似的问题,但是提供域名的网站是否适合部署? - phenomenon.aurora
显示剩余3条评论
6个回答

55

一个编辑 hosts 文件的替代方法是使用“Magic DNS”服务https://nip.io/

nip.io 是一个神奇的域名,为任何 IP 地址提供通配符 DNS。假设您的局域网 IP 地址是 10.0.0.1:

         10.0.0.1.nip.io   resolves to   10.0.0.1      (dot syntax)
    192-168-1-250.nip.io   resolves to   192.168.1.250 (dash syntax)
         0a000803.nip.io   resolves to   10.0.8.3      (hex syntax)
 foo.bar.10.0.0.1.nip.io   resolves to   10.0.0.1      (subdomains)
app-192-168-1-250.nip.io   resolves to   192.168.1.250 (prefixes)

通过这项服务,您可以指定一个看起来像公共域名的域名,解析到一个私有地址。

在控制台中,如果您的重定向URI是 (无论如何您希望拥有的内容):

http://192.168.1.1:8080/auth/google_oath2/callback

请将其替换为:

http://192.168.1.1.nip.io:8080/auth/google_oath2/callback

"Redirect URIs"似乎不接受通配符,因此需要在控制台中指定整个私有ip-xip.io。


好主意,但在一些提供者/网络上无法解决:http://andycroll.com/mac/ruby/xip-io-doesnt-work-on-bt/ - Fafaman
那是一篇三年前的博客文章,作者猜测一个特定的硬件设备(“与他们的网络使用BT HomeHub DNS有关的东西”)可能会导致问题。我在家里和办公室都没有遇到过问题,我不知道是什么动机让任何人故意阻止这项服务。 - whitehat101
这只是指出一个事实,即它无法与某些提供商一起使用:在我的情况下是free.fr。 - Fafaman
1
这个可行!而且在我看来比编辑hosts文件更好,因为对于Android或iOS开发,除非你root它,否则很难改变hosts文件。这种方法要容易得多。 - Rosdi Kasim
完美运行!谢谢。 - Rodrigo E. Principe
显示剩余2条评论

18

在进行Oauth调用时,Google不会接受本地(私有)IP地址。我的解决方法是在Windows hosts文件中添加一个条目,将本地IP添加进去:

\Windows\System32\drivers\etc

192.168.1.2   fakedomain.com

然后在Google的开发控制台中注册fakedomain.com。对于他们来说,这看起来像一个“真实”的域名,但仍将解析到本地IP地址。我相信在Mac或Linux上也可以采用类似的方法。


就像这样,虽然绕过的办法可能可行,但下一个问题是在实际情况下部署的可行性。现在我只是确定了用户客户端 API 访问需要一个域名,谢谢回复。 - phenomenon.aurora
2
不适用于设备。 - Sebastian Sastre
对于需要从 Android 设备调用 fakedomain 的任何人,你必须拥有 root 权限并编辑 /system/etc/hosts。它在 Android 模拟器上运行良好。 - daniherculano

7

编辑:仅在本地开发时相关。

好的,在我的Mac上遇到了同样的问题。按照以下步骤解决了问题。


当我们谈论在云/互联网上部署时,这种修复方案有多可行...只是想知道。 - phenomenon.aurora

3

在我的情况下,我将它从IP地址改为域名(192.168.1.113改为localhost),直到这样做后错误才消失。看起来Google不接受裸的IP地址。

如果您没有域名,请使用一个域名作为您的沙盒,或者设置一个本地域名服务器。


2
值得注意的是,在Mac上,你可以通过编辑成为root来做同样的事情:
/private/etc/hosts

请按照以上提到的方法添加一行相似的代码。
192.168.60.10   fakedomain.com

0

修改你的hosts文件,地址为\Windows\System32\drivers\etc\hosts

在hosts文件中添加“192.168.1.2 fakedomain.com”
重启你的Windows系统

将Google控制台中的IP地址192.168.1.2更新为fakedomain.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接