我正在构建一个需要与OAuth服务提供商通信的Python应用程序。 SP要求我指定一个回调URL。指定localhost显然不起作用。我无法设置面向公众的服务器。除了支付服务器/托管之外的任何想法?这甚至可能吗?
答案 0 :(得分:18)
两件事:
如果您未指定回调网址,则有问题的OAuth服务提供商违反了OAuth规范。 callback_url是spec'd to be an OPTIONAL parameter。
但是,除了迂腐之外,您可能希望在用户完成后获得回调,以便您知道可以为访问令牌兑换请求令牌。 Yahoo's FireEagle developer docs有很多关于如何执行此操作的重要信息。
即使在第二种情况下,回调URL实际上也不必从因特网上可见。 OAuth服务提供商会将用户使用的浏览器重定向到回调网址。
执行此操作的两种常用方法是:
(我相信你正在描述lives here的流程示例。)
答案 1 :(得分:10)
如果您使用的是* nix样式系统,请在127.0.0.1 mywebsite.dev
中创建/etc/hosts
之类的别名(您需要具有与文件中上述类似的行,使用http://website.dev/callbackurl/for/app
在回拨URL和本地测试期间。
答案 2 :(得分:4)
这与Facebook OAuth有关 - 我实际上 能够将“http://127.0.0.1:8080”指定为网站网址和回调网址。
表示Facebook应用程序的更改需要花费几分钟才能传播答案 3 :(得分:1)
这可能会对您有所帮助:
http://www.marcworrell.com/article-2990-en.html
这是php所以在你的开发服务器上设置应该非常简单。
我曾尝试过这一次:
这很简单。您有一个链接可以在底部下载代码。
答案 4 :(得分:1)
localtunnel [port]和voila
http://blogrium.wordpress.com/2010/05/11/making-a-local-web-server-public-with-localtunnel/
答案 5 :(得分:0)
您可以创建2个应用程序吗? 1用于部署,另一个用于测试。
或者,您还可以在请求请求令牌时包含oauth_callback参数。一些提供商将重定向到oauth_callback指定的网址(例如Twitter,Google),但有些会忽略此回调网址并重定向到配置期间指定的网址(例如Yahoo)
答案 6 :(得分:0)
所以我如何解决这个问题(使用BitBucket的OAuth接口)是通过指定localhost的回调URL(或者你真正想要的任何东西),然后使用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)
我希望这对某人有用!