37

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

4

7 回答 7

18

两件事情:

  1. 如果您未指定回调 URL,则相关的 OAuth 服务提供者如果它给您一个错误,则它违反了 OAuth 规范。callback_url 被指定为可选参数

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

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

两种常见的方法是:

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

(我相信你在这里描述的流程的一个例子。)

于 2009-03-22T06:15:23.070 回答
10

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

于 2012-08-24T10:16:18.753 回答
5

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.

于 2011-11-01T18:40:58.677 回答
1

这可能会帮助您:

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

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

这个我试过一次:

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

这很简单。您在底部有一个下载代码的链接。

于 2009-03-22T01:42:42.867 回答
1

localtunnel [端口] 瞧

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

http://github.com/progrium/localtunnel

于 2010-06-01T21:59:59.423 回答
0

所以我如何解决这个问题(使用 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)

我希望这对某人有用!

于 2013-04-03T13:06:46.457 回答
0

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

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

于 2010-06-25T12:17:48.727 回答