LinkedIn身份验证

时间:2013-09-17 16:31:42

标签: python django authentication oauth linkedin

身份验证失败 我正在努力让我的用户通过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)

1 个答案:

答案 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 docsaccess_token_url更新为OAuth 2.0端点https://www.linkedin.com/uas/oauth2/accessToken