如何在本地针对 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 进行身份验证