如何在本地针对 OAuth 进行开发?

Posted

技术标签:

【中文标题】如何在本地针对 OAuth 进行开发?【英文标题】:How do I develop against OAuth locally? 【发布时间】:2010-10-14 19:10:38 【问题描述】:

我正在构建一个需要与 OAuth 服务提供商通信的 Python 应用程序。 SP 要求我指定回调 URL。指定 localhost 显然是行不通的。我无法设置面向公众的服务器。除了支付服务器/托管费用之外还有什么想法吗?这甚至可能吗?

【问题讨论】:

【参考方案1】:

所以我解决这个问题的方法(使用 BitBucket 的 OAuth 接口)是通过指定回调 URL 到 localhost(或任何你真正想要的),然后使用 curl 跟踪授权 URL,但只返回HTTP 标头。示例:

curl --user BitbucketUsername:BitbucketPassword -sL -w "%http_code %url_effective\\n" "AUTH_URL" -o /dev/null

插入您的凭据和授权网址(记得转义感叹号!)。

你应该得到的是这样的:

200 http://localhost?dump&oauth_verifier=OATH_VERIFIER&oauth_token=OATH_TOKEN

你可以从这里刮掉 oath_verifier。

在 python 中做同样的事情:

import pycurl
devnull = open('/dev/null', 'w')
c = pycurl.Curl()

c.setopt(pycurl.WRITEFUNCTION, devnull.write)
c.setopt(c.USERPWD, "BBUSERNAME:BBPASSWORD")
c.setopt(pycurl.URL, authorize_url)
c.setopt(pycurl.FOLLOWLOCATION, 1) 
c.perform()

print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL)

我希望这对某人有用!

【讨论】:

对此的警告(至少在 BitBucket 中)是,您必须至少在最初访问 URL 才能单击接受。然后我认为它会记住您的凭据。【参考方案2】:

如果您使用 *nix 风格的系统,请在 /etc/hosts 中创建类似 127.0.0.1 mywebsite.dev 的别名(您需要在文件中具有与上述类似的行,在回调 URL 和期间使用 http://website.dev/callbackurl/for/app本地测试。

【讨论】:

Windows 也有一个 hosts 文件。在 Windows 7 上,它位于 C:\Windows\System32\drivers\etc\hosts【参考方案3】:

这是使用 Facebook OAuth - 我实际上 能够将“http://127.0.0.1:8080”指定为站点 URL 和回调 URL。对 Facebook 应用程序的更改需要几分钟才能传播,但随后它起作用了。

【讨论】:

【参考方案4】:

您可以创建 2 个应用程序吗? 1个用于部署,另一个用于测试。

或者,您还可以在请求请求令牌时包含 oauth_callback 参数。有些提供者会重​​定向到 oauth_callback 指定的 url(例如 Twitter、Google),但有些会忽略此回调 url 并重定向到配置期间指定的 URL(例如 Yahoo)

【讨论】:

【参考方案5】:

localtunnel [端口] 瞧

http://blogrium.wordpress.com/2010/05/11/making-a-local-web-server-public-with-localtunnel/

http://github.com/progrium/localtunnel

【讨论】:

【参考方案6】:

两件事:

    如果您未指定回调 URL,则该 OAuth 服务提供者会提示您错误,则该 OAuth 服务提供商违反了 OAuth 规范。 callback_url 是spec'd to be an OPTIONAL parameter。

    但是,撇开迂腐不谈,您可能希望在用户完成后收到回调,以便您知道可以将请求令牌兑换为访问令牌。 Yahoo's FireEagle developer docs 有很多关于如何做到这一点的重要信息。

即使在第二种情况下,回调 URL 实际上也不必在 Internet 上可见。 OAuth 服务提供者会将用户用来提供其用户名/密码的浏览器重定向到回调 URL。

执行此操作的两种常见方法是:

    在您的应用程序中创建一个哑 Web 服务,该服务侦听某个端口(例如,http://localhost:1234/)以获取完成回调,或者 注册一个协议处理程序(您必须查看您的操作系统的文档,专门了解如何执行此操作,但它可以使 之类的东西正常工作)。

(我相信您正在描述的流程示例lives here。)

【讨论】:

【参考方案7】:

这可能会对您有所帮助:

http://www.marcworrell.com/article-2990-en.html

它是 php,因此在您的开发服务器上设置应该非常简单。

这个我试过一次:

http://term.ie/oauth/example/

这很简单。底部有下载代码的链接。

【讨论】:

以上是关于如何在本地针对 OAuth 进行开发?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JMeter 中进行 OAuth 2.0 身份验证?

使用 Spring Boot OAuth2 针对 Google 进行身份验证时如何将 google 用户电子邮件发送到白名单用户

google-oauth / calendar api的本地开发问题

Spring Boot OAuth2 - 使用本地用户数据库向 Facebook 进行身份验证

如何在 devserver 上使用 Oauth 测试 Cloud Endpoints

如何使用python通过oauth登录到第三方应用程序