公共IP地址能用作Google OAuth重定向URI吗?

60

我正在尝试设置一个需要用户Google Latitude信息的网络服务,因此我使用Google OAuth获取用户授权。

然而,在为Web应用程序客户端ID设置重定向URI时,如果我将其设置为'http://PUBLIC_IP/',就会收到错误消息。

我需要与非本地用户进行测试(因此无法使用本地主机),所以我想知道是否必须拥有Web域才能使用Google的OAuth。 如果不是,我该如何解决这个问题?

9个回答

60

目前不支持此功能。我已经提出了一个功能请求,并将在进展方面进行更新。

更新: 必要的应用程序验证活动仍在继续,因此基于IP地址的应用程序的支持可能性很小。这些验证活动是为了提供对用户帐户的滥用保护而必需的。此外,自请求此功能以来,设置专用域名的成本已大大降低。请阅读此处其他响应,以获取可能的选项。


3
值得注意的是,自定义顶级域名也不受支持。如果oauth能够重定向到我私有网络中的URI,那就太好了,但似乎不支持。这是否已确认为不支持?谢谢。 - meawoppl
2
有功能请求的链接吗? - tsuna
今天是2017年12月30日,公共IP和保留TLD仍然无法使用。:( 有保留的TLD(https://tools.ietf.org/html/rfc2606),应该支持使本地开发更加容易。 - vee
1
我在开发中所做的是使用ssh端口转发将Google OAuth允许的uri映射到我实际用于开发的服务器的IP地址上。从被允许的uri作为服务器运行:ssh -L 8080:localhost:8080 user@<dev-server-address> - theferrit32
谷歌没有计划将公共IP添加为可信任的,因为他们不信任IP。这可能会带来许多潜在威胁,包括中间人攻击和身份盗窃。简单地说,您并不是您的IP的真正所有者,您只是暂时拥有它,明天它可能在任何其他人手中。 - Clain Dsilva
显示剩余2条评论

55

您可以使用xip.io来解决此问题。

例如:'192.168.0.50.xip.io:3000' 将解析为 '192.168.0.50:3000'


通过这个,我可以在开发期间为我的应用程序设置 Google 登录机制。我能够配置 redirect_uri,并使用我的 docker-machine IP 地址。太棒了! - Johan Chouquet
我尝试了你的解决方案。它完成了任务,但是当我使用Chrome时,它会显示警告消息,称该网站可能是“欺骗性的”。 - Va1iant
1
这对我来说一直很好用,但后来就不行了。为了让它再次正常工作,我不得不将http://xip.io和xip地址与我的IP(例如http://192.168.0.50.xip.io:3000)都加入白名单。请注意,您在浏览器中输入的地址必须与您添加到白名单中的地址完全相同。 - Adrian Guerrero
1
看起来 xip.io 已经更改为 nip.io - Islam

13

我也遇到了这个问题,所以我输入了一个带有 .com 后缀的 URL,并将其添加到了我的 /etc/hosts 文件中。效果不错。

但是非常糟糕的是,现在我的整个应用程序似乎都必须在 'live' 域上开发。


对我来说也一样。我在实际域上有 mydomain.com。我必须将 mydomain-localhost.com 添加到 Windows 主机文件中,并在 Google API 中输入此域名。这太糟糕了。 - vee
这只适用于局域网中的单台计算机。对于多台计算机,则无法访问该URL。 - GeneCode

7

我使用了我的公共主机名。如果您有静态IP地址,则会更有帮助。我使用了http://www.displaymyhostname.com/来获取我的主机名。在创建新的Web应用程序客户端ID时,我将其直接插入已授权的JavaScript来源字段中。

附:我的主机名看起来像这样:111.111.111.111.static.exetel.com.au


1
谢谢你的回答,它对我有用。我忘记了亚马逊给出的主机名(http://ec2-<public-ip>.<region>.compute.amazonaws.com)已经可以使用,这个链接让我知道了这一点。 :) - ciuncan
@ciuncan 我正在使用AWS Cloud9,并从此方法中获取了我的主机名,但即使我已将其添加到白名单和重定向URI中,仍然收到错误。你是如何解决这个问题的?我已经尝试过带端口和不带端口的方式。 - Vincent Nguyen
我的主机名只是IP地址,使用这个工具无法工作。 - GeneCode

4
您可以使用动态DNS。我使用的是提供免费解决方案的ddns.net。基本上,您将FQDN输入为:yourcompany.ddns.net作为您的域名。当查找IP地址时,.net域名指向ddns;当查找ddns.net时,它会在其数据库中查找您的公司,并返回IP。所以我的链接看起来像这样:https://wigwam.ddns.net ,一切正常运行。您不需要购买域名,可以替换已知的IP地址,Google也会满意。
当然,您的IP必须是静态的。

这个解决方案不好,因为 DNS 将每 30 天自动过期。 - GeneCode
任何免费的东西都不能指望满足任何服务级别协议,或者长时间免费。原帖需要测试,这提供了这样做的机会。 - Andrew Jay

3

目前来说,如果想在应用程序中使用Google OAuth,你仍然需要拥有一个域名。如果你有一个静态的公共IP地址,而又不想购买一个域名,那么你可以使用FreeDNS提供的免费子域名与你的公共IP地址关联起来。我曾经在一个Django应用程序中使用过这种方法,效果还不错。


1
创建一个即时免费的子域名,并在您的应用程序中使用它,所有 DNS 名称都可以正常工作。 - Raja Nagendra Kumar

1

回应Breno之前的评论:

很抱歉这里缺乏更新。必要的应用程序验证活动仍在继续,这使得基于IP地址的应用程序的支持变得不太可能。这些验证活动是为了提供对用户帐户滥用的保护措施。此外,自此功能被请求以来,设置专用域名的成本已经大大降低。有关可能选项,请阅读此处的其他响应。

您可以阅读有关Google应用程序验证要求[1]和Google要求安全处理数据的政策[2]的更多信息。

[1] https://support.google.com/cloud/answer/9110914?hl=en

[2] https://developers.google.com/identity/protocols/oauth2/policies#secure-response-handling


1

xip.io已经无法使用,作为替代方案,您可以使用nip.io,例如:
10.0.0.1.nip.io:8000将解析为10.0.0.1:8000
您可以将其用作解决方法。


你也可以将IP更改为localhost:8000或127.0.0.1:8000,它会正常工作。 - Mohcen CH
谷歌允许使用本地主机进行测试,操作者可能需要指向自定义IP。 - varaprasadh
nip.io是什么意思? - Luis Felipe
@LuisFelipe 去 nip.io 网站,你就会明白它的含义了。我不太明白你所说的“它的含义是什么”是什么意思。 - Mohcen CH

0

看起来xip.io已经挂了,但是有一些替代品,比如sslip.io和nip.io。然而,我无法让它们中的任何一个工作。

最终,我将主文件服务器托管在主机上,并在192.168.1.xx IP地址上运行该服务器。然后在每台测试机器上(包括主机上的第二个服务器)运行服务器,所有这些服务器都在本地主机地址上。本地主机服务器接收到的任何请求都会被传递给192.168.1.xx服务器,从而允许在所有设备上进行测试。

这也适用于公共面向IP地址的情况。


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