python - Django 中的 Oauth 1.0a

标签 python django oauth rdio

我正在尝试在 Django 应用程序中对 Rdio API 进行授权调用。到目前为止,我一直在查看以下教程来进行设置:

http://www.rdio.com/developers/docs/web-service/oauth/ref-oauth1-overview

页面底部的代码对我来说效果很好:我可以获取请求 token ,使用 PIN 授权用户,然后使用新的访问 token 进行调用。

但是,我想实现回调,以便用户可以登录并返回我的网站,以便我可以使用他们的帐户发出授权请求。我目前有一个页面,其中包含用于授权应用程序的链接,其中获取链接的函数如下所示:

def get_auth_url():
    client = oauth.Client(consumer)
    response, content = client.request('http://api.rdio.com/oauth/request_token', 'POST', urllib.urlencode({'oauth_callback': 'http://localhost:8080/my_page/'}))
    parsed_content = dict(cgi.parse_qsl(content))
    request_token = oauth.Token(parsed_content['oauth_token'], parsed_content['oauth_token_secret'])
    sURL = '%s?oauth_token=%s' % (parsed_content['login_url'], parsed_content['oauth_token'])
    return sURL

这没关系,当我单击此链接时,我会转到一个页面,要求授权我的帐户使用此应用程序。但是,然后我需要从用户刚刚授权的请求 token 中获取访问 token 。授权页面的回调为我提供了 oauth_verifieroauth_token 参数,但构造请求 token 需要 oauth_tokenoauth_token_secret。我在第一次调用时获得了 secret ,但在第二次调用中无法再次获取它,并且教程说我不应该将 secret 存储在可访问的任何地方或跨请求传输它。由于这是两个不同的请求,我无法想到在哪里存储持久请求 token 。如何在第二个请求中获取 oauth_token_secret 以便获取访问 token ?

最佳答案

您需要将请求 token 临时存储在服务器上,以便可以发出访问 token 请求。这一行:

The request token secret must be included in the signature but not over the wire.

指的是 secret 用于生成签名,但本身不包含在请求中的事实。

为了节省您的时间和精力,我建议使用 Django Social Auth 。已经supports Rdio .

关于python - Django 中的 Oauth 1.0a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912278/

相关文章:

python - BeautifulSoup 获取列表的 href - 需要简化脚本 - 替换多处理

Django 应用程序表在管理 UI 中不可见

mysql - Django-MySQL 无法识别额外查询集中的 model.column?

python - 警告 : Running pip as the 'root' user

laravel - Httponly cookie 作为不记名 token - Laravel Passport

php - 从登录页面重定向

python - 将冷却时间/计时器添加到 on_message [Discord.py]

python - 将参数传递到 AWS CLI 命令

python - 在 Python 中动态创建循环并存储一些值

oauth - 通用分析和 Facebook 注册