我正在构建一个需要与 OAuth 服务提供者通信的 Python 应用程序。SP 要求我指定回调 URL。指定 localhost 显然是行不通的。我无法设置面向公众的服务器。除了支付服务器/托管费用之外还有什么想法吗?这甚至可能吗?
7 回答
两件事情:
如果您未指定回调 URL,则相关的 OAuth 服务提供者如果它给您一个错误,则它违反了 OAuth 规范。callback_url 被指定为可选参数。
但是,撇开迂腐不谈,您可能希望在用户完成后收到回调,以便您知道可以将请求令牌兑换为访问令牌。雅虎的 FireEagle 开发者文档有很多关于如何做到这一点的重要信息。
即使在第二种情况下,回调 URL 实际上根本不必从 Internet 上可见。OAuth 服务提供者会将用户用来提供其用户名/密码的浏览器重定向到回调 URL。
两种常见的方法是:
- 从您的应用程序中创建一个哑 Web 服务,该服务在某个端口(例如http://localhost:1234/)上侦听完成回调,或者
- 注册一个协议处理程序(您必须查看您的操作系统的文档,专门了解如何执行此操作,但它可以使 <a href="skype:555-1212"> 之类的东西正常工作)。
(我相信你在这里描述的流程的一个例子。)
如果您使用 *nix 样式系统,请创建一个别名,如127.0.0.1 mywebsite.dev
in /etc/hosts
(您需要在文件中具有与上述类似的行,http://website.dev/callbackurl/for/app
在回调 URL 和本地测试期间使用。
This was with the Facebook OAuth - I actually was able to specify 'http://127.0.0.1:8080' as the Site URL and the callback URL. It took several minutes for the changes to the Facebook app to propagate, but then it worked.
这可能会帮助您:
http://www.marcworrell.com/article-2990-en.html
它是 php,因此在您的开发服务器上设置应该非常简单。
这个我试过一次:
这很简单。您在底部有一个下载代码的链接。
localtunnel [端口] 瞧
http://blogrium.wordpress.com/2010/05/11/making-a-local-web-server-public-with-localtunnel/
所以我如何解决这个问题(使用 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)
我希望这对某人有用!
你可以创建2个应用程序?1个用于部署,另一个用于测试。
或者,您还可以在请求请求令牌时包含 oauth_callback 参数。一些提供商将重定向到 oauth_callback 指定的 url(例如 Twitter、Google),但有些提供商会忽略此回调 url 并重定向到配置期间指定的 URL(例如 Yahoo)