Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

С какого запроса следует начинать авторизацию на DropBox?

#http #https #oauth #request #dropbox


Доброго времени суток, уважаемые форумчане!

Изучаю документацию по протоколу Oauth 1.0 для DropBox, но не могу понять, с какого
запроса следует начинать сеанс обращения к серверу DropBox. В документации написано,
что первый запрос должен содержать следующие параметры:


  
  oauth_consumer_key: The Consumer Key.
  oauth_signature_method:
  The signature method the Consumer used to sign the request.
  oauth_signature:
  The signature as defined in Signing Requests.
  oauth_timestamp:
  As defined in Nonce and Timestamp.
  oauth_nonce:
  As defined in Nonce and Timestamp.
  oauth_version:
  OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol
version to be 1.0 if this parameter is not present. Service Providers’ response to
non-1.0 value is left undefined.
  Additional parameters:
  Any additional parameters, as defined by the Service Provider.
  


Для вычисления подписи предлагается использовать PLAINTEXT, HMAC-SHA1 или RSA-SHA1.
Методом PLAINTEXT ничего не получилось, как не пыталась отправлять запросы, сервер
всё время возвращал ошибку "Not authorized".

Решила попробовать создавать подпись с помощью HMAC-SHA1, но не понятно, что будет
являться входным параметром, а что ключом. Подскажите ещё, пожалуйста, какой нужно
отправлять метод: POST или GET, куда передавать параметры: в строку запроса или в тело
запроса?

Ссылка на рефы DropBox: http://oauth.net/core/1.0/#signing_process

Пример:

    wstring url = L"https://www.dropbox.com/home/request_token";
    wstring oauth_nonce;
    CreateRequestParam(oauth_nonce);
    wstring oauth_callback = L"";
    wstring oauth_consumer_key = L"my App key";
    wstring oauth_consumer_secret = L"my App secret";
    wstring oauth_signature_method = L"PLAINTEXT";
    wstring oauth_timestamp = to_wstring(*(double*)time);
    wstring oauth_version = L"1.0";
    wstring oauth_signature = oauth_consumer_secret + L"&";
    wstring params = L"oauth_consumer_key=" + oauth_consumer_key +
                     L"&oauth_signature_method=" + oauth_signature_method +
                     L"&oauth_signature=" + oauth_signature +
                     L"&oauth_timestamp=" + oauth_timestamp +
                     L"&oauth_nonce=" + oauth_nonce +
                     L"&oauth_version=" + oauth_version;

    int err = PostRequest(url, params);


На указанный url отправляю HTTP POST запрос, в теле передаю параметры, указанные
выше. Должны возвращаться out_token и outh_secret, но возвращается страница в html-формате,
в которой нет ни того, ни другого. Что я делаю не так?
    


Ответы

Ответ 1



Не знаю, актуален ли еще вопрос, попробую ответить. Первый запрос на адрес https://api.dropbox.com/1/oauth/request_token Пример: POST https://api.dropbox.com/1/oauth/request_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="105816471209",oauth_signature="wloizpn331cc8zd&",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A37%3A53%20%2B0000",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded В ответ получаете oauth_token HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:32 GMT Content-Type: application/x-www-form-urlencoded ... Content-Length: 64 oauth_token_secret=LZl8HyVRQuP1ifON&oauth_token=RS4XReiBykw8WHNz Затем отправляете пользователя в браузер на страничку https://www.dropbox.com/1/oauth/authorize?oauth_token=RS4XReiBykw8WHNz Пользователь нажимает кнопочку Allow. Затем выполняете запрос на второй URL (подписываете его уже с использованием полученного ранее oauth_token_secret: https://api.dropbox.com/1/oauth/access_token POST https://api.dropbox.com/1/oauth/access_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="847334669",oauth_signature="wloizpn331cc8zd&LZl8HyVRQuP1ifON",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A46%3A46%20%2B0000",oauth_token="RS4XReiBykw8WHNz",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded И получаете в ответ токен, который будете использовать при последующих запросах: HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:55 GMT Content-Type: application/x-www-form-urlencoded Connection: keep-alive ... Content-Length: 76 oauth_token_secret=32mdalirxxxxa8j&oauth_token=yx8f9rdxxxxj8dia&uid=1921xxxx Пример авторизации на Dropbox Пример OAuth авторизации на Flickr с подписыванием запроса HMAC-SHA1

Комментариев нет:

Отправить комментарий