gpt4 book ai didi

c# - Twitter API 在调用 account/verify_credentials.json 时返回 215 Bad Authentication Data

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:11 24 4
gpt4 key购买 nike

我正在编写一个 API,它需要验证由 Twitter SDK 在移动设备上创建的 OAuth token 和 token secret 。

为此,我尝试调用 account/verify_credentials.json的推特 API。我已经跳过了所有OAuth signature generation hoops然而,对于每个请求,我都会得到相同的响应:

{
"errors": [{
"code": 215,
"message": "Bad Authentication data."
}]
}

我无法解释为什么会发生这种情况,因为我遵循了 Twitter 的指导方针并引用了其他几个具有类似目标的问题,但仍然没有运气。

另外,请注意我不想为此使用库。我需要做的就是这一个请求,所以额外的库会不必要地膨胀。下面是我生成错误响应的代码:

var httpMethod = HttpMethod.Get;
var uri = new Uri("https://api.twitter.com/1.1/account/verify_credentials.json");

var nonce = Guid.NewGuid().ToString();
var timestamp = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString(CultureInfo.InvariantCulture);

var oauthParameters = new SortedDictionary<string, string>
{
{"oauth_consumer_key", Settings.OAuth.Twitter.ConsumerKey},
{"oauth_nonce", nonce},
{"oauth_signature_method", "HMAC-SHA1"},
{"oauth_timestamp", timestamp},
{"oauth_token", accessToken},
{"oauth_version", "1.0"}
};

var signingParameters = new SortedDictionary<string, string>(oauthParameters);
var parsedQuery = HttpUtility.ParseQueryString(uri.Query);
foreach (var k in parsedQuery.AllKeys)
signingParameters.Add(k, parsedQuery[k]);

var parameterString = string.Join("&", signingParameters.Keys.Select(k => $"{Uri.EscapeDataString(k)}={Uri.EscapeDataString(signingParameters[k])}"));

var stringToSign = string.Join("&", new[] { httpMethod.Method.ToUpper(), uri.AbsoluteUri, parameterString }.Select(Uri.EscapeDataString));
var signingKey = Settings.OAuth.Twitter.ConsumerSecret + "&" + tokenSecret;
var signature = Convert.ToBase64String(new HMACSHA1(Encoding.ASCII.GetBytes(signingKey)).ComputeHash(Encoding.ASCII.GetBytes(stringToSign)));

oauthParameters.Add("oauth_signature", signature);
var authHeader = string.Join(",", oauthParameters.Keys.Select(k => $"{Uri.EscapeDataString(k)}=\"{Uri.EscapeDataString(oauthParameters[k])}\""));

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", authHeader);
var response = await client.GetAsync(uri);
return await response.Content.ReadAsStringAsync(); // always error 215

最佳答案

我刚刚逐字逐句地尝试了您的代码,它的效果非常好。

您的问题一定是您的 Twitter 应用程序 key 。再次尝试从 apps.twitter.com 复制它们。如果仍然不起作用,您可能需要重新创建 key 。

关于c# - Twitter API 在调用 account/verify_credentials.json 时返回 215 Bad Authentication Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com