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

时间:2009-03-22 01:37:14

标签: python oauth

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

7 个答案:

答案 0 :(得分:18)

两件事:

  1. 如果您未指定回调网址,则有问题的OAuth服务提供商违反了OAuth规范。 callback_url是spec'd to be an OPTIONAL parameter

  2. 但是,除了迂腐之外,您可能希望在用户完成后获得回调,以便您知道可以为访问令牌兑换请求令牌。 Yahoo's FireEagle developer docs有很多关于如何执行此操作的重要信息。

  3. 即使在第二种情况下,回调URL实际上也不必从因特网上可见。 OAuth服务提供商会将用户使用的浏览器重定向到回调网址。

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

    1. 从您的应用程序中创建一个愚蠢的Web服务,该服务侦听某个端口(例如http://localhost:1234/)以获得完成回调,或者
    2. 注册协议处理程序(您必须查看操作系统的文档,具体说明如何执行此类操作,但它可以使< a href =“skype:555-1212”>等工作正常工作)。
    3. (我相信你正在描述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所以在你的开发服务器上设置应该非常简单。

我曾尝试过这一次:

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

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

答案 4 :(得分:1)

答案 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)

我希望这对某人有用!