2011-01-19 15 views
3

現在、Chrome拡張機能を使用してGoogleサービスにアクセスしようとしています。私の理解では、JSアプリケーションの場合、Googleの推奨される認証メカニズムはOAuthです。私のアプリは現在、OAuth経由で認証されています。OAuthアクセストークンを使用してSOAPサービスにアクセスしますか?

サービスを照会するための好ましいメカニズムは、SOAP経由です。しかし、SOAPにはXMLの本体に設定された独自の「認証トークン」概念があります。私はGoogleのドキュメントごとに古いスタイルの 'ClientLogin'トークンを使用していません。

OAuth認証アクセストークンを使用してSOAPクエリを実行するにはどうすればよいですか?または、私は照会や認証に異なるメカニズムを使用する必要がありますか?

答えて

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> 

ボディーはノーマルです。

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

、クエリ文字列に必要なOAuthのフィールドを追加する適切な方法(JSでoauth.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:手動でクエリを実行するのではなくsendSignedRequestようsometong使用する必要がある場合、それは次のようになり、クエリ文字列でのOAuth、SOAPヘッダからすべての認証情報を省略します。

関連する問題