私はこれを機能させるために過去4時間苦労してきましたが、何も機能しません。私は例を高低で検索してきましたが、試したことはすべて失敗しました。
oAuth を実装するのはこれが初めてではありませんが (Google ドライブと Dropbox での実装に成功しました)、Twitter API で使用するアクセス トークンを取得できません。
リクエスト トークン (およびシークレット) を取得し、ユーザーを Twitter Web サイトにリダイレクトするリクエストを成功させることができます。ユーザーがアプリを承認すると、コールバック URL がヒットし、ベリファイアが取得されます。
ここで、ベリファイアを送信し、それをアクセス トークン (およびシークレット) と交換することになっています。
ただし、それを行うように要求すると、常に 401 Unauthorized エラーが返されます。他に何を試したらいいのかわからないほど多くのことを試しました。リクエストのコードは次のとおりです。
Uri uri = new Uri("https://api.twitter.com/oauth/access_token");
OAuth.OAuthBase oAuth = new OAuth.OAuthBase();
String nonce = oAuth.GenerateNonce();
String timestamp = oAuth.GenerateTimeStamp();
String parameters = "";
String normalizedUrl = "";
String signature = oAuth.GenerateSignature(uri, _consumerKey, _ConsumerSecret, requestToken, requestTokenSecret, "POST", timestamp, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normalizedUrl, out parameters);
StringBuilder authHeader = new StringBuilder();
authHeader.AppendFormat("oauth_token=\"{0}\", ", requestToken);
authHeader.AppendFormat("oauth_consumer_key=\"{0}\", ", _consumerKey);
authHeader.AppendFormat("oauth_nonce=\"{0}\", ", nonce);
authHeader.AppendFormat("oauth_timestamp=\"{0}\", ", timestamp);
authHeader.AppendFormat("oauth_signature_method=\"{0}\", ", "HMAC-SHA1");
authHeader.AppendFormat("oauth_version=\"{0}\", ", "1.0");
authHeader.AppendFormat("oauth_signature=\"{0}\"", Uri.EscapeDataString(signature));
ServicePointManager.Expect100Continue = false;
WebRequest request = HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Authorization", "OAuth " + authHeader.ToString());
using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
{
sw.WriteLine("oauth_verifier=" + verifier);
}
WebResponse response = request.GetResponse();
requestToken と requestTokenSecret は、最初のリクエストの後に受け取ったトークンです。
署名を生成する oAuth ヘルパー クラスは正常に動作します。しばらくの間、正常に使用しています。
常に 401 が返されるという要求の何が問題なのですか?
ありがとう