O#的C#问题

时间:2010-12-30 09:58:17

标签: c# oauth

我正在尝试创建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);

如果我做错了,请告诉我。

由于

1 个答案:

答案 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获取的。我强烈建议您查看它,它应该做你想做的一切。