我正在尝试创建oauth签名。但我不知道我做错了什么,因为该网站给出了未授权错误。我正在使用oauth版本1.0。方法是HMAC-SHA1,它是基于谷歌的oauth。我的基本字符串是正确的,因为它使用示例输出检查它。 我的代码:
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);
如果我做错了,请告诉我。
由于
答案 0 :(得分:4)
签名的关键应该是:
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获取的。我强烈建议您查看它,它应该做你想做的一切。