2013-09-17 3 views
0

Ошибка аутентификации Я пытаюсь без успеха подключить своих пользователей к LinkedIn через аутентификацию Oauth в Python. Я использую Django в python и не использую стороннюю социальную аутентификацию. Я использую Руководство для получения доступа к API с помощью Python и Django. Однако мне трудно получить токен доступа. Я могу заставить пользователя войти в систему и получить код аутентификации. Я поместил новый запрос, поскольку предыдущий вопрос был слишком запутан. Вы можете видеть это здесь: Performing POST on a URL string in DjangoLinkedIn Authentication

Ничего не было разрешено и по-прежнему не уверены, если это проблема с 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) 
+0

Есть ли какая-либо конкретная причина не использовать оболочку Python? https://github.com/ozgur/python-linkedin – PepperoniPizza

+0

Или вместо обложки, как насчет Django-Social-Auth? https://github.com/omab/django-social-auth –

ответ

1

Ваш login код перенаправляется на OAuth 2.0 конечной точки https://www.linkedin.com/uas/oauth2/authorization но ваш обратный вызов loginsuccess пытается извлечь маркер OAuth 1.0a из https://api.linkedin.com/uas/oauth/accessToken. Вам необходимо обновить access_token_url до конечной точки OAuth 2.0 https://www.linkedin.com/uas/oauth2/accessToken за LinkedIn docs.

+1

Dooh! Спасибо, я этого не заметил - теперь это отсортировано. Большое спасибо за дополнительную пару глаз. Я прошу LinkedIn создать полную рабочую копию на Python, так как у многих людей много проблем. – disruptive

+0

Бесстыдный плагин, не является официальным от linkedin, но работает красиво - http://requests-oauthlib.readthedocs.org/en/latest/tutorials/linkedin.html –

Смежные вопросы