【发布时间】:2012-05-14 10:21:35
【问题描述】:
我正在尝试测试OAuth 按钮,但它们(Facebook、Twitter、LinkedIn)都返回错误,似乎表明我无法从本地 URL 测试或使用它们.
如果人们似乎都需要 non-dev 和 non-local 连接环境,那么人们通常如何使用 OAuth 进行开发?
【问题讨论】:
-
我曾经回答过这个问题:stackoverflow.com/a/10410838/604511
我正在尝试测试OAuth 按钮,但它们(Facebook、Twitter、LinkedIn)都返回错误,似乎表明我无法从本地 URL 测试或使用它们.
如果人们似乎都需要 non-dev 和 non-local 连接环境,那么人们通常如何使用 OAuth 进行开发?
【问题讨论】:
2016 年 10 月更新:现在最简单:使用始终指向 127.0.0.1 的 lvh.me。
上一个答案:
由于回调请求是由浏览器发出的,作为 HTTP 重定向响应,您可以设置您的 .hosts 文件或等效文件以将不是localhost 的域指向 127.0.0.1。
假设您在 Twitter 上注册了以下回调:http://www.publicdomain.com/callback/。确保www.publicdomain.com 指向您的hosts 文件中的127.0.0.1,并且twitter 可以对www.publicdomain.com 进行成功的DNS 查找,即域需要存在并且如果请求,特定的回调应该可能返回200 状态消息。
编辑:
我刚刚阅读了以下文章:http://www.tonyamoyal.com/2009/08/17/how-to-quickly-set-up-a-test-for-twitter-oauth-authentication-from-your-local-machine,该文章已链接到此问题:Twitter oAuth callbackUrl - localhost development。
引用文章:
您可以使用网址缩短服务 bit.ly。只需缩短 [localhost URL 例如 http//localhost:8080/twitter_callback] 并将缩短的 URL 注册为您的 Twitter 应用程序中的回调。
这应该比在 .hosts 文件中摆弄更容易。
请注意,现在(2014 年 8 月)bit.ly 不允许将链接转发到 localhost;但是 Google 链接缩短器可以工作。
PS 编辑:(18 年 11 月):Google 链接缩短器停止支持 localhost 或 127.0.0.1。
【讨论】:
.me)。结果,lvh.me 无法正常工作。我用lacolhost.com 找到了成功。
或者您可以使用https://tolocalhost.com/ 并配置它应该如何将回调重定向到您的本地站点。您可以指定主机名(如果与 localhost 不同,即 yourapp.local 和端口号)。 仅用于开发目的。
【讨论】:
您也可以使用 ngrok:https://ngrok.com/。我一直使用它在我的本地主机上运行公共服务器。希望这会有所帮助。
另一个甚至免费提供您自己的自定义域的选项是serveo.net 和https://localtunnel.github.io/www/
【讨论】:
./ngrok http 8080 -host-header="localhost:8080",我正在使用公共 url 运行。
对于 Mac 用户,编辑 /etc/hosts 文件。如果它是只读的,您必须使用sudo vi /etc/hosts。授权后,oauth 服务器会发送回调 URL,由于回调 URL 是在本地浏览器上呈现的,因此本地 DNS 设置将起作用:
127.0.0.1 mylocal.com
【讨论】:
将您的本地域设置为mywebsite.example.com(并将其重定向到本地主机)——即使通常使用mywebsite.dev。这将允许强大的自动测试。
虽然授权.test和.dev是不允许的,但在google oauth2中授权example.com是允许的。
(您可以在 hosts 文件中将任何域重定向到 localhost(unix/linux:/etc/hosts))
为什么是mywebsite.example.com?
因为example.com是保留域名。所以
not-redirected-by-mistake.example.com。【讨论】:
您可以在 windows 或 linux 上编辑 hosts 文件 视窗:C:\Windows\System32\Drivers\etc\hosts Linux : /etc/hosts
localhost 名称解析在 DNS 本身内处理。
127.0.0.1 mywebsite.com
完成测试后,您只需注释添加的行以禁用它
127.0.0.1 mywebsite.com
【讨论】:
Google 不允许在 localhost 上使用 http://webporject.dev 或 .loc 和 .etc 以及 google 短链接来测试身份验证 api,从而缩短您的本地 url(http://webporject.dev) 和 bit.ly :)。 Google 只接受以 http://localhost/... 开头的网址...
如果您想测试 google auth api,您应该按照以下步骤操作...
如果您使用openserver,请转到设置面板并单击aliases tab 并单击下拉菜单,然后找到localhost 并选择它。
现在您应该通过单击第一个下拉列表旁边的下一个下拉列表来选择您的本地 Web 项目根文件夹。
然后单击一个名为 add 的按钮并重新启动 opensever。
现在您的本地项目可在此链接上使用 http://localhost/
您也可以将此本地 url 粘贴到 google auth api 到 redirect url 字段...
【讨论】:
我发现xip.io 会自动将固定的 url 转换为嵌入式 localhost 域。
例如,假设您的 localhost 服务器在 127.0.0.1:8000 上运行
你可以去http://www.127.0.0.1.xip.io:5555/访问这个服务器。
然后,您可以将此地址添加到 Facebook 或 Google 的 Oauth 配置中。
【讨论】:
此答案仅适用于 Google OAuth
它实际上非常简单,我很惊讶它对我有用(我仍然怀疑我的眼睛所看到的)。
显然,您可以在 Google Developer Console 上将 localhost 添加为受信任的域,因为 localhost 是大多数规则的例外,如您所见 here。
这可以通过 OAuth 2.0 客户端 ID on this page 完成。点击编辑,然后添加http://localhost:8000或类似端口,然后点击保存。
在输入框中包含http 或https 至关重要。
HTTP 还是 HTTPS?
我再次对 Google 允许使用 http 感到惊讶,但请注意,如果您的应用程序已发布到生产环境,则会存在轻微的安全风险。
如果你想格外小心,你可以选择坚持使用 https。这将要求您在 localhost 服务器上设置 SSL 证书。
这比您想象的要容易,因为 SSL 证书不需要是有效的。许多 http 服务器应该给你这个选项。无论如何,您都必须在浏览器中单击“继续”按钮才能绕过大红色警告。
这比 http 更安全,因为 a) 如果黑客尝试进行钓鱼攻击,用户会看到一个大红色警告,或者 b) 他们唯一不会看到此警告的情况是用户故意设置了一个自托管 SSL 证书,在这种情况下,他们可能知道自己在做什么(我想病毒在技术上也可以做到这一点,但在那个阶段,他们已经获得了对用户系统的足够控制权,可以做任何他们想做的事情)。
【讨论】:
另一个有价值的选择是https://github.com/ThomasMcDonald/Localhost-uri-Redirector。这是一个非常简单的 html 页面,可以重定向到您在 UI 中配置的任何主机和端口。
该页面托管在 Github https://thomasmcdonald.github.io/Localhost-uri-Redirector,因此您可以将其用作您的 OAuth2 重定向 url 并在 UI 中配置您的目标主机和端口,它只会重定向到您的应用程序
【讨论】:
我在使用其他答案中提到的工具时遇到了一些问题,例如http://tolocalhost.com 不转发查询参数(更不用说您必须先访问该页面并对其进行配置,与https://thomasmcdonald.github.io/Localhost-uri-Redirector/ 相同)和http://lvh.me对我没有用,因为我在本地计算机上运行代理,并且需要公共 URL 指向像 http://mywebsite.dev 这样的私有 URL。
所以我制作了自己的工具来满足我的需求,也可能满足你的需求:
例子:
https://redirectmeto.com/https://www.google.com/search?q=puppies
http://redirectmeto.com/http://localhost:4000/oauth/authorize
【讨论】:
以 Google OAuth 为参考
在您的 OAuth 客户端选项卡中
(http://localhost:3000) 添加到 授权的 JavaScript 来源 URI在您的OAuth 同意屏幕中
mywebsite.com 添加到授权域
在 windows 或 linux 上编辑 hosts 文件 Windows C:\Windows\System32\Drivers\etc\hosts Linux : /etc/hosts 以添加 127.0.0.1 mywebsite.com(注:如果有任何其他 127.0.0.1,请注释掉)
【讨论】: