Используя токен доступа OAuth для доступа к сервису SOAP? - PullRequest
3 голосов
/ 19 января 2011

В настоящее время я пытаюсь получить доступ к службе Google через расширение Chrome.Насколько я понимаю, для приложений JS предпочтительным механизмом аутентификации Google является OAuth.В настоящее время мое приложение успешно проходит проверку подлинности через службу OAuth.

Предпочтительный механизм запроса службы - через SOAP.Однако у SOAP есть своя собственная концепция «токен аутентификации», которая задана в теле XML.У меня нет токена ClientLogin в старом стиле, который можно использовать в документах Google.

Как я могу выполнить запросы SOAP, используя мой токен доступа с аутентификацией OAuth?Или я должен использовать другой механизм для запроса или проверки подлинности?

1 Ответ

4 голосов
/ 26 января 2011

Отвечая себе:

Аутентификация в OAuth с помощью обычного механизма, т. Е. В JS:

var oauth = ChromeExOAuth.initBackgroundPage({
 'request_url': 'https://www.google.com/accounts/OAuthGetRequestToken',
 'authorize_url': 'https://www.google.com/accounts/OAuthAuthorizeToken',
 'access_url': 'https://www.google.com/accounts/OAuthGetAccessToken',
 'consumer_key': 'anonymous',
 'consumer_secret': 'anonymous',
 'scope': 'https://domain_for_your_api/',
 'app_name': 'Your app name'
});

Затем аутентификация и выполнение ваших запросов SOAP в качестве обратного вызова:

function authenticateAndGetAlerts() {
    oauth.authorize(runMyRequest);
}

Заголовок SOAP является уменьшенной версией документа, за исключением полей, которые необходимы только для API ClientLogin.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://adwords.google.com/api/adwords/mcm/v201008" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <SOAP-ENV:Header>
  <ns1:RequestHeader xsi:type="ns2:RequestHeader">
   <ns2:developerToken>Your developer token</ns2:developerToken>
   <ns2:userAgent>Your app name</ns2:userAgent>
  </ns1:RequestHeader>
 </SOAP-ENV:Header>

Тело в норме.

Затем выполните POST, используя соответствующий метод (oauth.sendSignedRequest в JS), который добавит необходимые поля OAuth в строку запроса:

var request = {
 'method': 'POST',
 'body': soapenvelope
};   
oauth.sendSignedRequest(url, callback, request);

Готово.Если вам нужно выполнить запрос вручную, а не использовать что-то наподобие sendSignedRequest, он выглядит следующим образом:

servicename.google.com/where/your/service/lives?oauth_consumer_key=anonymous&oauth_nonce=something&oauth_signature=something&oauth_signature_method=HMAC-SHA1&oauth_timestamp=something&oauth_token=something

TLDR: OAuth в строке запроса, пропустите всю информацию об аутентификации из заголовка SOAP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...