2011-01-19 5 views
3

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

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

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

ответ

4

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

Аутентифицировать к 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-заголовок - это меньшая версия документированного документа, опуская поля, которые необходимы только для ClientLogin API.

<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); 

Done. Если вам нужно сделать запрос, а вручную, чем использовать sometong как 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.

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