第一个。step,获取url进行验证,verifier就ok了。
使用与 request_token 中相同的方法对请求进行签名,我得到“未经授权”、“oauth_problem = signature invalid”。
我逐字验证代码,我找不到问题。
- 步骤,请求令牌-> OK
- 获取 url 中的验证码 -> OK
- 生成access_token,签名无效。
我有几个函数,但我把可读的代码放在一个函数中来查找问题:
public void GetAccessToken(string oauthVerifier)
{
IRestResponse response;
RestClient client = new RestClient(apiURI);
string timeStamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
string atNonce = Guid.NewGuid().ToString();
RestRequest request = new RestRequest(GET_ACCESS_TOKEN_URL, Method.GET);
request.AddParameter("oauth_consumer_key", consumerKey);
request.AddParameter("oauth_timestamp", timeStamp);
request.AddParameter("oauth_nonce", atNonce);
request.AddParameter("oauth_signature_method", SIGNATURE_METHOD);
request.AddParameter("oauth_signature", "");
request.AddParameter("oauth_token", token);
request.AddParameter("oauth_verifier", oauthVerifier);
//var parameters = new SortedDictionary<string, string>();
var parameters = new SortedDictionary<string, string>
{
{"oauth_consumer_key", consumerKey},
{"oauth_timestamp", timeStamp},
{"oauth_nonce", atNonce},
{"oauth_signature_method", SIGNATURE_METHOD},
{ "oauth_token", token },
{ "oauth_verifier", oauthVerifier }
};
var sb = new StringBuilder();
sb.Append("GET");
sb.Append("&" + WebUtility.UrlEncode(apiURI + GET_ACCESS_TOKEN_URL));
sb.Append("&" + WebUtility.UrlEncode(NormalizeParameters(parameters)));
var signatureBase = sb.ToString();
var signatureKey = string.Format("{0}&{1}", WebUtility.UrlEncode(consumerSecret), WebUtility.UrlEncode(tokenSecret));
var hmac = new HMACSHA1(Encoding.ASCII.GetBytes(signatureKey));
string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.ASCII.GetBytes(signatureBase)));
request.Parameters[4].Value = signature;
response = client.Execute(request);
}
响应变量因为“signature_invalid”而“未经授权”。
欢迎任何帮助,在此先感谢您!
更新 1
Oauth文档说签名也必须进行urlencode,然后我将其转换为base 64字符串后,我也对其进行了urlencode:
request.Parameters[4].Value = WebUtility.UrlEncode(signature);
无论如何,仍然返回“签名无效”。
那里有来自天上的光?谢谢!