0

身份验证失败我试图让我的用户通过 Python 中的 Oauth 身份验证登录 LinkedIn,但没有成功。我在 python 中使用 Django,而不是使用任何第三方社交身份验证。我正在使用指南来访问使用 Python 和 Django 的 API。但是我无法获得访问令牌。我可以让用户登录并获取验证码。我提出了一个新的请求,因为之前的问题太复杂了。你可以在这里看到:Performing POST on a URL string in Django

什么都没有解决,仍然不确定这是否是 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

您的login代码正在重定向到 OAuth 2.0 端点https://www.linkedin.com/uas/oauth2/authorization,但您的回调loginsuccess正在尝试从https://api.linkedin.com/uas/oauth/accessToken. 您需要根据LinkedIn 文档access_token_url更新您的 OAuth 2.0 端点。https://www.linkedin.com/uas/oauth2/accessToken

于 2013-09-17T18:11:58.417 回答