0

Oauth 1.0 は既に非推奨になっているため、Google によるアクティブな Oauth 1.0 サポートは見つかりませんでした。しかし、Gmail データにアクセスしたいので、Oauth 1.0 を使用する必要があります。

そのため、Google アプリケーションの RequestToken を取得するために 2 日間試みていましたが、無効な署名エラーが発生しています。私のベース文字列は、Google から返されたデバッグ文字列と一致します。

HMAC-SHA1 と RSA-SHA1 の両方を使用してみましたが、キーは正しいです。(トークンとシークレットの両方を、Google が非登録アプリケーションに推奨する匿名として使用することさえ試みました。) ナンスが間違っているか、パーセント エンコーディングの問題が原因である可能性があります。Twitterでも同じ方法がうまくいきました。

また、コードを下に貼り付けています。誰かが助けてくれたり、適切なフォーラムを教えてくれたりするとうれしいです。

    $('#GMAIL_BUTTON').click(function () {
    //oauth1 approach similar to twitter
    var requestUrl = "https://www.google.com/accounts/OAuthGetRequestToken";
    var scope = "https://mail.google.com/";
    var clientID = "anonymous";
    var clientSecret = "anonymous";
    var rsakey = "MIICblahblahblah";
    var timestamp = Math.round(new Date().getTime() / 1000.0);
    var nonce = Math.random();        
    var sigBaseStringParams = "oauth_consumer_key=" + clientID;
    sigBaseStringParams += "&" + "oauth_nonce=" + nonce;
    sigBaseStringParams += "&" + "oauth_signature_method=HMAC-SHA1";
    sigBaseStringParams += "&" + "oauth_timestamp=" + timestamp;
    sigBaseStringParams += "&" + "scope=" + encodeURIComponent(scope);
    var sigBaseString = "GET&";
    sigBaseString += encodeURIComponent(requestUrl) + "&" +        encodeURIComponent(sigBaseStringParams) + "\n" + "\n";
    requestUrl += "?scope=https://mail.google.com/";
    var keyText = encodeURIComponent(clientSecret) + "&";
    //var keyText = rsakey;
    var keyMaterial =     Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(keyText, Windows.Security.Cryptography.BinaryStringEncoding.Utf8);
    var macAlgorithmProvider = Windows.Security.Cryptography.Core.MacAlgorithmProvider.openAlgorithm("HMAC_SHA1");
    var key = macAlgorithmProvider.createKey(keyMaterial);
    //var keyMaterial = Windows.Security.Cryptography.CryptographicBuffer.decodeFromBase64String(rsakey);
    //var macAlgorithmProvider = Windows.Security.Cryptography.Core.AsymmetricKeyAlgorithmProvider.openAlgorithm("RSASIGN_PKCS1_SHA1");
    //var key = macAlgorithmProvider.importKeyPair(keyMaterial);
    var tbs = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary(sigBaseString, Windows.Security.Cryptography.BinaryStringEncoding.Utf8);
    var signatureBuffer = Windows.Security.Cryptography.Core.CryptographicEngine.sign(key, tbs);
    var signature =    Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(signatureBuffer);
    var dataToPost = "OAuth oauth_consumer_key=\"" + clientID + "\", oauth_nonce=\"" + nonce + "\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"" + timestamp + "\", oauth_signature=\"" + encodeURIComponent(signature) + "\", oauth_version=\"1.0\"";
    var response = sendGetRequest(requestUrl, dataToPost, null);
});

SendGetRequest メソッドは -

   function sendGetRequest(url, authzheader, params) {
    try {
        var request = new XMLHttpRequest();
        request.open("GET", url, false);
        request.setRequestHeader("Authorization", authzheader);
        request.send(params);
        return request.responseText;
    } catch (err) {
        WinJS.log("Error sending request: " + err, "Web Authentication SDK Sample", "error");
    }
}
4

1 に答える 1

0

コードに明らかなエラーは見つかりませんでしたが、 https: //developers.google.com/accounts/docs/OAuth2UserAgent にあるクライアント側アプリ ライブラリに Google の OAuth 2 を使用すると、はるかに簡単に処理できるようになるでしょう。さらに、atom フィード スコープ (https://mail.google.com/mail/feed/atom) を使用することもできます。https://code.google.com/ で、このスコープと他のスコープを試すことができます。 oauthplayground/ .

于 2012-07-18T09:56:51.267 に答える