【问题标题】:OAuth: how to test with local URLs?OAuth:如何使用本地 URL 进行测试?
【发布时间】:2012-05-14 10:21:35
【问题描述】:

我正在尝试测试OAuth 按钮,但它们(Facebook、Twitter、LinkedIn)都返回错误,似乎表明我无法从本地 URL 测试或使用它们.

如果人们似乎都需要 non-devnon-local 连接环境,那么人们通常如何使用 OAuth 进行开发?

【问题讨论】:

标签: oauth localhost


【解决方案1】:

2016 年 10 月更新:现在最简单:使用始终指向 127.0.0.1lvh.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。

【讨论】:

  • 我以为服务器调用了callbackurl,现在意识到oauth使用客户端作为信使并且服务器之间没有建立连接,这使得它变得更加简单。
  • 值得注意的是,lvh.me 由一位名叫 Levi Cook 的绅士拥有(请参阅 gist.github.com/levicook/563675 )并且它是私有的。他看起来是个好人,但它不是全球权威机构的正式授权域,因此它可能“理论上”在某个时间点停止工作。
  • 截至撰写本文时,Google 似乎不允许在重定向 URL 中使用花哨的域扩展(如 .me)。结果,lvh.me 无法正常工作。我用lacolhost.com 找到了成功。
  • lvh.me 的所有者也可以开始收集你所有的授权码...
  • @JonNylander 他们可以轻松更改其 DNS 记录以指向另一个站点,该站点透明地存储身份验证代码和状态,并且仍然重定向回 l​​ocalhost。除非您定期检查 DNS,否则在他们已经获得访问权限之前您不会注意到。唯一会立即注意到的是人们在浏览器上下文之外使用它。
【解决方案2】:

或者您可以使用https://tolocalhost.com/ 并配置它应该如何将回调重定向到您的本地站点。您可以指定主机名(如果与 localhost 不同,即 yourapp.local 和端口号)。 仅用于开发目的。

【讨论】:

  • 该站点不转发 url 参数(至少在 firefox 中)
  • @EricWooley 感谢您让我知道。这应该有效,但似乎被打破了。好多年没碰过了,我去看看。
【解决方案3】:

您也可以使用 ngrok:https://ngrok.com/。我一直使用它在我的本地主机上运行公共服务器。希望这会有所帮助。

另一个甚至免费提供您自己的自定义域的选项是serveo.net 和https://localtunnel.github.io/www/

【讨论】:

  • 这比我想象的要容易!刚刚创建了我的帐户,安装它并运行./ngrok http 8080 -host-header="localhost:8080",我正在使用公共 url 运行。
【解决方案4】:

对于 Mac 用户,编辑 /etc/hosts 文件。如果它是只读的,您必须使用sudo vi /etc/hosts。授权后,oauth 服务器会发送回调 URL,由于回调 URL 是在本地浏览器上呈现的,因此本地 DNS 设置将起作用:

127.0.0.1       mylocal.com

【讨论】:

    【解决方案5】:

    将您的本地域设置为mywebsite.example.com(并将其重定向到本地主机)——即使通常使用mywebsite.dev。这将允许强大的自动测试。

    虽然授权.test.dev是不允许的,但在google oauth2中授权example.com允许的。

    (您可以在 hosts 文件中将任何域重定向到 localhost(unix/linux:/etc/hosts))

    为什么是mywebsite.example.com
    因为example.com是保留域名。所以

    1. 您的机器上不会出现命名冲突。
    2. 如果您的测试系统公开数据,则没有数据风险 到not-redirected-by-mistake.example.com

    【讨论】:

      【解决方案6】:

      您可以在 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

      【讨论】:

      • 它对我有用,谢谢。此外,如果您使用例如端口 3000 上的 Node.js,使用 mywebsite.com:3000
      【解决方案7】:

      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 字段...

      【讨论】:

        【解决方案8】:

        我发现xip.io 会自动将固定的 url 转换为嵌入式 localhost 域。

        例如,假设您的 localhost 服务器在 127.0.0.1:8000 上运行 你可以去http://www.127.0.0.1.xip.io:5555/访问这个服务器。 然后,您可以将此地址添加到 Facebook 或 Google 的 Oauth 配置中。

        【讨论】:

          【解决方案9】:

          此答案仅适用于 Google OAuth

          它实际上非常简单,我很惊讶它对我有用(我仍然怀疑我的眼睛所看到的)。

          显然,您可以在 Google Developer Console 上将 localhost 添加为受信任的域,因为 localhost 是大多数规则的例外,如您所见 here

          这可以通过 OAuth 2.0 客户端 ID on this page 完成。点击编辑,然后添加http://localhost:8000或类似端口,然后点击保存。

          在输入框中包含httphttps 至关重要。

          HTTP 还是 HTTPS?

          我再次对 Google 允许使用 http 感到惊讶,但请注意,如果您的应用程序已发布到生产环境,则会存在轻微的安全风险。

          如果你想格外小心,你可以选择坚持使用 https。这将要求您在 localhost 服务器上设置 SSL 证书。

          这比您想象的要容易,因为 SSL 证书不需要是有效的。许多 http 服务器应该给你这个选项。无论如何,您都必须在浏览器中单击“继续”按钮才能绕过大红色警告。

          这比 http 更安全,因为 a) 如果黑客尝试进行钓鱼攻击,用户会看到一个大红色警告,或者 b) 他们唯一不会看到此警告的情况是用户故意设置了一个自托管 SSL 证书,在这种情况下,他们可能知道自己在做什么(我想病毒在技术上也可以做到这一点,但在那个阶段,他们已经获得了对用户系统的足够控制权,可以做任何他们想做的事情)。

          【讨论】:

          【解决方案10】:

          另一个有价值的选择是https://github.com/ThomasMcDonald/Localhost-uri-Redirector。这是一个非常简单的 html 页面,可以重定向到您在 UI 中配置的任何主机和端口。

          该页面托管在 Github https://thomasmcdonald.github.io/Localhost-uri-Redirector,因此您可以将其用作您的 OAuth2 重定向 url 并在 UI 中配置您的目标主机和端口,它只会重定向到您的应用程序

          【讨论】:

            【解决方案11】:

            我在使用其他答案中提到的工具时遇到了一些问题,例如http://tolocalhost.com 不转发查询参数(更不用说您必须先访问该页面并对其进行配置,与https://thomasmcdonald.github.io/Localhost-uri-Redirector/ 相同)和http://lvh.me对我没有用,因为我在本地计算机上运行代理,并且需要公共 URL 指向像 http://mywebsite.dev 这样的私有 URL。

            所以我制作了自己的工具来满足我的需求,也可能满足你的需求:

            https://redirectmeto.com

            例子:

            https://redirectmeto.com/https://www.google.com/search?q=puppies

            http://redirectmeto.com/http://localhost:4000/oauth/authorize

            http://redirectmeto.com/http://client.dev/page

            【讨论】:

              【解决方案12】:

              以 Google OAuth 为参考

              • 在您的 OAuth 客户端选项卡中

                1. 将您的应用 URI 示例(http://localhost:3000) 添加到 授权的 JavaScript 来源 URI
              • 在您的OAuth 同意屏幕中

                1. 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,请注释掉)

              【讨论】:

                猜你喜欢
                • 2016-03-13
                • 2017-09-12
                • 1970-01-01
                • 1970-01-01
                • 2011-11-04
                • 2016-08-07
                • 1970-01-01
                • 1970-01-01
                • 2011-03-11
                相关资源
                最近更新 更多