2

我一直在使用 netflix api 和 python oauth2 库的受保护身份验证。我提出签名请求没有问题,但是,为了允许用户使用他们的 netflix 帐户登录,我在尝试获取 access_token 时遇到了一些问题,我知道在某些情况下 OAuth 不返回 a verifier,甚至如果它应该,但是在从 netflix 的授权页面重定向后,我得到如下信息:http://127.0.0.1:5000/authorized_user?oauth_token=some_token&oauth_verifier=验证器为空。

我是图书馆的新手,不知道verfier不存在时该怎么办。因为,我成功地将用户重定向到 netflix 登录/授权页面。我假设我的错误来自我不完全理解的这一步。下面是我正在尝试的简化(shell)版本。我很感激朝着正确的方向前进,我阅读了 netflix 文档并阅读了库文档,但不知道该怎么做。

# Get request token (temporary)
resp, content = client.request(REQUEST_TOKEN_URL, "GET")

if resp['status'] != '200':
    raise Exception("Invalid response %s." % resp['status'])

request_token = dict(parse_qsl(content))

print 'Request token'
print  '  --> oauth_token          =  %s' % request_token['oauth_token']
print  '  --> oauth_token_secret   =  %s' % request_token['oauth_token_secret']
print  '  --> login_url            =  %s' % request_token['login_url']

# Redirect to netflix for user authorization

print 'Go to the following link: '
login_url = request_token['login_url']
access_token_url = '%s&oauth_consumer_key=%s' % (login_url, CONSUMER_KEY)

accepted = 'n'
while accepted.lower() == 'n':
    accepted = raw_input('Have you authorized me? (y/n) ')

resp, content = client.request(access_token_url, "POST")

token = oauth.Token(request_token['oauth_token'],
                    request_token['oauth_token_secret'])

client = oauth.Client(consumer, token)

resp, content = client.request(access_token_url, "POST")
access_token = dict(parse_qsl(content))

print "Access Token:"
print "    - oauth_token        = %s" % access_token['oauth_token']
print "    - oauth_token_secret = %s" % access_token['oauth_token_secret']
4

1 回答 1

1

所以听起来你正在尝试使用 python-oauth2。不幸的是,这个库被广泛认为是废弃的软件。我强烈建议使用维护的库。为此,我可以推荐rauth。我是 rauth 的维护者,因为它的价值。

现在不幸的是,Netflix 不接受新的应用程序到他们的 OAuth 基础设施中。但是,我确实为您写了一个示例,如果您愿意尝试一下,可以尝试一下。我不能保证如果没有一些调整它就不会工作,但它是:

from rauth import OAuth1Service

import re
import webbrowser

request_token_url = 'http://api-public.netflix.com/oauth/request_token'
access_token_url = 'http://api-public.netflix.com/oauth/access_token'
authorize_url = 'https://api-user.netflix.com/oauth/login'
base_url = 'http://api-public.netflix.com/'

netflix = OAuth1Service(consumer_key='123',
                        consumer_secret='456',
                        request_token_url=request_token_url,
                        authorize_url=authorize_url,
                        access_token_url=access_token_url,
                        base_url=base_url)

request_token, request_token_secret = netflix.get_request_token()

oauth_callback = 'http://example.com/oauth/authorized'

params = {'oauth_callback': oauth_callback, 'application_name': 'your_app'}
authed_url = netflix.get_authorize_url(request_token, **params)

print 'Visit this URL in your browser: ' + authed_url
webbrowser.open(authed_url)

url_with_token = raw_input('Copy URL from your browser\'s address bar: ')
request_token = re.search('\?oauth_token=([^&]*)', url_with_token).group(1)

s = netflix.get_auth_session(request_token, request_token_secret)

r = s.get('users/current')
print r.content

这里需要注意几件事:Netflix 在他们的文档中没有提到验证者。所以我猜这就是你看不到的原因。其次,他们正在返回一个“授权”请求令牌。基本上,这个令牌取代了他们流程中的验证者引脚。

希望这可以帮助!

于 2013-04-02T14:54:48.357 回答