身份验证失败 我正在努力让我的用户通过Python中的Oauth身份验证登录LinkedIn。我在python中使用Django而不使用任何第三方社交认证。我正在使用指南来使用Python和Django访问API。但是我无法获得访问令牌。我可以让用户登录并获取验证码。我提出了一个新请求,因为早先的问题太复杂了。你可以在这里看到:Performing POST on a URL string in Django
没有解决任何问题,仍然不确定这是LinkedIn或代码的问题。遗憾的是,LinkedIn在这里并没有特别有用。
但在获取Author代码后,我根本无法获取访问令牌。我收到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)
答案 0 :(得分:1)
您的login
代码正在重定向到OAuth 2.0端点https://www.linkedin.com/uas/oauth2/authorization
,但您的回调loginsuccess
正在尝试从https://api.linkedin.com/uas/oauth/accessToken
获取OAuth 1.0a令牌。您需要根据LinkedIn docs将access_token_url
更新为OAuth 2.0端点https://www.linkedin.com/uas/oauth2/accessToken
。