C # проблема с Oauth - PullRequest
       8

C # проблема с Oauth

3 голосов
/ 30 декабря 2010

Я пытаюсь создать подпись oauth. Но я не знаю, что я делаю неправильно, потому что сайт дает несанкционированную ошибку. Я использую oauth версии 1.0. Метод HMAC-SHA1, и он основан на Google. Моя базовая строка верна, потому что она проверила ее с помощью примера вывода. Мой код:

string oauthSig = "";
        string baseString = HttpUtility.UrlEncode(httpMethod.ToUpper()) + "&" +
                            HttpUtility.UrlEncode(url) + "&" +
                            HttpUtility.UrlEncode("oauth_callback="+callback+"&"+
                                                  "oauth_consumer_key="+consumerKey+"&"+
                                                  "oauth_nonce="+nounce+"&"+
                                                  "oauth_signature_method="+sigMethod+"&"+
                                                  "oauth_timestamp=" + timestamp + "&" +
                                                  "oauth_version=" + version
                                                  );
        HMACSHA1 myhmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(HttpUtility.UrlEncode(consumeSecret)),true);
        byte[] hashValue = myhmacsha1.ComputeHash(Encoding.UTF8.GetBytes(baseString));
        oauthSig = Convert.ToBase64String(hashValue);

Пожалуйста, скажите мне, если я делаю что-то не так.

Спасибо

1 Ответ

4 голосов
/ 30 декабря 2010

Ключ к подписи должен быть:

CONSUMER_SECRET + '&' + TOKEN_SECRET

А поскольку у вас еще нет секретного токена, вы должны использовать CONSUMER_SECRET и амперсанд (&) в качестве ключа к подписи.

Редактировать, дальнейшие уточнения :

HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));

byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(data);
byte[] hashBytes  = hmacsha1.ComputeHash(dataBuffer);

return Convert.ToBase64String(hashBytes);

Я не тестировал код, но взял его у oauth.googlecode.com - OAuthBase.cs . Я настоятельно рекомендую проверить это, оно должно делать все, что вы хотите.

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