0

Python で Oauth 認証を使用してユーザーを LinkedIn にサインインさせようとしましたが、成功しませんでした。私は Python で Django を使用しており、サードパーティのソーシャル認証は使用していません。このガイドを使用して、Python と Django を使用して API にアクセスしています。しかし、アクセストークンの取得に問題があります。ユーザーをログインさせ、認証コードを取得できます。以前の質問が複雑すぎるため、新しいリクエストを出しました。ここで確認できます: Django で URL 文字列に対して POST を実行する

何も解決されておらず、これが LinkedIn の問題なのかコードの問題なのかはまだ不明です。悲しいことに、LinkedIn はここでは特に役に立ちませんでした。

しかし、作成者コードを取得した後、アクセス トークンを取得できません。すべてで 400 エラーが発生し、作成者コードを取得しているにもかかわらず、ドキュメントが示唆するように投稿すると、次のようになります。

u'oauth_problem=parameter_absent&oauth_parameters_absent=oauth_consumer_key%26oauth_signature%26oauth_signature_method%26oauth_token%26oauth_timestamp%26oauth_verifier'

誰かが何が問題なのかを見つけられることを願って、ここに私の Python コード全体を同封します。

import oauth2 as oauth
import httplib2
import time, os, simplejson
import urllib
import urllib2
import pycurl
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.core.urlresolvers import resolve
#from django.core.shortcuts import render, redirect
from django import forms
from django.utils import timezone
import urlparse
import requests

consumer_key = 'Yours'
consumer_secret = 'Yours'
user_token = 'Yours'
user_secret = 'Yours'

consumer = oauth.Consumer(consumer_key, consumer_secret)
access_token = oauth.Token(key=user_token,secret=user_secret)
client = oauth.Client(consumer, access_token)
request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken'
access_token_url = 'https://api.linkedin.com/uas/oauth/accessToken'
authorize_url = 'https://www.linkedin.com/uas/oauth/authenticate'

def login(request):

redirect_uri = urllib2.quote('http://127.0.0.1:9000/loginsuccess')

codeURL = "https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=c3skrqz5wqmm&scope=r_fullprofile&state=DCEEFWF45453sdffef425&redirect_uri=" + redirect_uri

# Fill the keys and secrets you retrieved after registering your app

# Use your API key and secret to instantiate consumer object

#resp,content = client.request("http://api.linkedin.com/v1/people/~?format=json", "GET", "")

#resp, content = client.request(request_token_url, "POST")
#request_token = dict(urlparse.parse_qsl(content))
#return HttpResponse(access_token)

return HttpResponseRedirect(codeURL)

def loginsuccess(request):
authcode = request.GET.get('code')
redirect_uri = 'http://www.jelt.com'
#redirect_succ = 'http://www.127.0.0.1:8080/manage'

postdata = {
'grant_type': 'authorization_code',
'code': authcode,
'redirect_uri': redirect_uri,
'client_id': consumer_key,
'client_secret': consumer_secret,
}

r = requests.post(access_token_url, data=postdata)

#return HttpResponse(r.text)
#return HttpResponse(r.status_code)

return HttpResponseRedirect(redirect_uri)

def Manage(request):
return HttpResponseRedirect('http://www.xyz.com')

def success(request):
redirect_uri = urllib2.quote('http://www.xyz.com')
redirect_uri = "http://www.xyz.com"
return HttpResponseRedirect(redirect_uri)
4

1 に答える 1

1

コードはOAuth login2.0 エンドポイントにリダイレクトしてhttps://www.linkedin.com/uas/oauth2/authorizationいますが、コールバックloginsuccessは から OAuth 1.0a トークンを取得しようとしていますhttps://api.linkedin.com/uas/oauth/accessTokenLinkedIn のドキュメントに従って、access_token_urlOAuth 2.0 エンドポイントに更新する必要があります。https://www.linkedin.com/uas/oauth2/accessToken

于 2013-09-17T18:11:58.417 に答える