J'ai écrit un programme Python pour utiliser OAuth
. J'observe un problème lors de l'accès aux ressources de service en utilisant le jeton d'accès (Twitter comme exemple).Données d'authentification incorrectes sur l'utilisation des en-têtes d'authentification Twitter
Je suis en mesure de récupérer avec succès le access_token
, mais si j'essaie d'utiliser access_token
en tant que Authorization
en-tête dans twitter, cela ne fonctionne pas. Cependant, si je le transmets comme paramètres url normaux, alors j'obtiens les résultats désirés.
parameters_access_resource = [
('oauth_consumer_key', self.consumerKey),
('oauth_signature_method', 'HMAC-SHA1'),
('oauth_timestamp', self._timestamp),
('oauth_nonce', self._nonce),
('oauth_version', '1.0'),
('oauth_token', self._accessToken),
('oauth_signature', self._signature)
]
Ci-dessous travaux Méthode:
urlLink = "https://api.twitter.com/1.1/account/settings.json"
url = "?".join((urlLink, urllib.urlencode(parameters_access_resource)))
reqobj = urllib2.Request(url,data=[])
resp = urllib2.urlopen(reqobj)
print resp.read()
Problème:
Selon la documentation Twitter, le access_token
doit être passé comme Authorization
tête, donc je modifie le code ci-dessous
headers = {
"Accept": "*/*",
"Connection": "close",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Content-Type" : "application/x-www-form-urlencoded",
"Host" : "api.twitter.com",
"Authorization" : self._getAuthorizationHeader(parameters_access_resource)
}
def _getAuthorizationHeader(self,params):
params = dict(params)
sortedParams = {}
sortedParams = collections.OrderedDict(sorted(params.items()))
authHeader = (
'%s="%s"' % (k, v) for k, v in sortedParams.iteritems())
retval = "OAuth " + ', '.join(authHeader)
return retval
url = "https://api.twitter.com/1.1/account/settings.json"
reqobj = urllib2.Request(url,data=[],headers=headers)
resp = urllib2.urlopen(reqobj)
print resp.read()
L'erreur suivante est rapportée, j'ai essayé différentes combinaisons, y compris en utilisant le module requests
mais je n'arrive pas à comprendre le problème.
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
Quelqu'un peut-il me guider s'il vous plaît sur la façon de résoudre ce problème. P.: Je sais qu'il y a beaucoup de modules déjà disponibles pour cette tâche, mais j'écris ce code pour mon but d'apprentissage.