использование библиотеки Python oauth2 в Django для доступа к Dropbox - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь получить доступ к информации учетной записи Dropbox с помощью библиотеки oauth2.Я получил токен доступа из Dropbox.Тогда я делаю следующее:

parameters = {
    'oauth_consumer_key'    : DropboxConstants.app_key, #my app key
    'oauth_token'           : access_token_g,#token that i got [<key>,<secret>]
    'oauth_signature_method': oauth.SignatureMethod_HMAC_SHA1.name,
    'oauth_timestamp'       : oauth.generate_timestamp(),
    'oauth_nonce'           : oauth.generate_nonce(),
    'oauth_version'         : DropboxConstants.api_version,
    'oauth_signature'       : ''
}

#prepare signature
oauth_request=         oauth.Request(method="GET",url=DropboxConstants.account_info_url,parameters=parameters)
signature_method_m  = oauth.SignatureMethod_HMAC_SHA1()
signature           = signature_method_m.signing_base(consumer=consumer,request=oauth_request,token=access_token_g)

parameters['oauth_signature'] = signature[1]

#prepare url for accessing account info
url = "%s?oauth_token=%s&oauth_consumer_key=%s&oauth_signature_method=%s&oauth_timestamp=%s&oauth_nonce=%s&oauth_version=%s&oauth_signature=%s"%\
      (DropboxConstants.account_info_url,access_token['oauth_token'],parameters['oauth_consumer_key'],parameters['oauth_signature_method'],parameters['oauth_timestamp'],parameters['oauth_nonce'],parameters['oauth_version'], parameters['oauth_signature'])

return HttpResponseRedirect(url)

теперь генерируется подпись: GET & https% 3A% 2F% 2Fapi.dropbox.com% 2F0% 2Faccount% 2Finfo & oauth_consumer_key% 3Dedw6k7d78hu8q8v% 26oauth_nonce% 26oauth_ndce%3DHMAC-SHA1% 26oauth_timestamp% 3D1314679561% 26oauth_token% 3Doauth_token_secret% 253Dun58fgoc14n9jlv% 2526oauth_token% 253D2ew2dafg0r40uwq% 26oauth_version% 3D1.0 * 100 * ошибка * 100 * * 100 * ошибка

100 * * *. подпись Ожидаемая подпись базовой строки: GET & HTTPS% 3A% 2F% 2Fapi.dropbox.com% 2F0% 2Faccount% 2Finfo & HTTPS% 253A% 252F% 252Fapi.dropbox.com% 252F0% 252Faccount% 252Finfo% 3D% 26oauth_consumer_key% 3Dedw6k7d78hu8q8v% 26oauth_consumer_key% 253Dedw6k7d78hu8q8v% 2526oauth_nonce% 253D39519001% 2526oauth_signature_method% 253DHMAC-SHA1% 2526oauth_timestamp% 253D1314679561% 2526oauth_token% 253Doauth_token_secret% 25253Dun58fgoc14n9jlv% 252526oauth_token% 25253D2ew2dafg0r40uwq% 2526oauth_version% 253D1.0% 3D% 26oauth_nonce% 3D39519001% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1314679561% 26oauth_token% 3D2ew2dafg0r40uwq% 26oauth_version% 3D1.0 "}

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

На самом деле я решил эту проблему с небольшим изменением кода как:

access_token_g = 
oauth.Token(key=access_token['oauth_token'],secret=access_token['oauth_token_secret'])
#prepare signature
oauth_request       = oauth.Request(method="GET",url=account_info_url,parameters=parameters)
signature_method_m  = oauth.SignatureMethod_HMAC_SHA1()

oauth_request.sign_request(signature_method=signature_method_m,consumer=consumer,token=access_token_g)

resp, content = client.request(oauth_request.to_url())

Это дает мне правильное содержание ..

0 голосов
/ 30 августа 2011

во-первых, пожалуйста, используйте urlencode для корректного экранирования символов:

from urllib import urlencode
...
parameters['oauth_token'] = access_token_g['oauth_token']
url = "?".join(DropboxConstants.account_info_url, urlencode(parameters))

посмотрим, поможет ли это, если нет, я посмотрю в базу сигнатур

...