2

私は、netflix api と python oauth2 ライブラリの保護された認証に取り組んできました。verifier署名付きリクエストを作成しても問題ありませんが、ユーザーが netflix アカウントを使用してサインインできるようにするために、access_token を取得しようとするといくつかの問題が発生します。ただし、netflix の認証ページからリダイレクトされた後、次のような結果が得られますhttp://127.0.0.1:5000/authorized_user?oauth_token=some_token&oauth_verifier=。ベリファイアが空です。

私はライブラリが初めてで、verfierが存在しない場合に何をすべきかをまったく理解していませんでした。それ以来、ユーザーを netflix サインイン/認証ページに正常にリダイレクトしました。私のエラーは、私が完全には理解していないこのステップに起因すると思います。以下は、私が試みているものの簡略化された(シェル)バージョンです。正しい方向へのプッシュに感謝します.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 インフラストラクチャへの新しいアプリケーションを受け入れていません。ただし、rauth を試してみたい場合に試すことができる例を作成しました。微調整なしでは機能しないとは約束できませんが、次のとおりです。

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

ここで注意すべき点が 2 つあります。Netflix は、ドキュメントでベリファイアについて言及していません。だから、何も見えないのはそのためだと思います。次に、「承認された」リクエストトークンを所定の場所に返します。基本的に、このトークンはフロー内の検証者ピンを置き換えます。

お役に立てれば!

于 2013-04-02T14:54:48.357 に答える