OAuth 1.0を使用するAPIを使用しています。 APIのウェブサイトには、標準的な方法を使用する以外のドキュメントはありません。私はここのtwitterサイトのガイドに従いましたhttps://dev.twitter.com/oauth/overview/creating-signatures。OAuth 1.0 APIで無効な署名
すべてが私にとっては良いようですが、私には無効な署名があるというメッセージが表示され続けます。私はgithubで見つけたクラスで始めました。署名のエラーが出ていました。クラスは大変複雑でしたので、私は自分のシンプルなクラス(C#を使用しています)を作成しました。ここで使用されているすべての値を正しく設定するコンストラクタがあります。私は100%確かに欠けているデータはない、問題は署名/要求がどのように生成されているかでなければならないが、私が見る限り、すべてが正しくセットアップされている。出力ヘッダーが正しく表示され、すべてが読み込まれます。どんなアイデアが間違っている?
public string GenerateHeaderString(string url, string method)
{
string auth = "OAuth oauth_consumer_key=\"" + ConsumerKey + "\",oauth_token=\"" + HttpUtility.UrlEncode(Token) + "\",oauth_signature_method=\"" + SignatureMethod
+ "\",oauth_timestamp=\"" + Timestamp + "\",oauth_nonce=\"" + Nonce + "\",oauth_version=\"" + Version + "\",oauth_signature=\"" + GenerateSignature(url, method) + "\"";
return auth;
}
public string GenerateSignature(string url, string method)
{
string signature = method + "&" + HttpUtility.UrlEncode(url) + "&" + HttpUtility.UrlEncode("oauth_consumer_key=" + ConsumerKey
+ "&oauth_nonce=" + Nonce + "&oauth_signature_method=" + SignatureMethod + "&oauth_timestamp="
+ Timestamp + "&oauth_token=" + Token + "&oauth_version=" + Version);
switch(SignatureMethod)
{
case "HMAC-SHA1":
string keystring = string.Format("{0}&{1}", HttpUtility.UrlEncode(this.ConsumerSecret),HttpUtility.UrlEncode(this.TokenSecret));
var hmacsha1 = new HMACSHA1
{
Key = System.Text.Encoding.ASCII.GetBytes(keystring)
};
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(signature);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
this.Signature = HttpUtility.UrlEncode(Convert.ToBase64String(hashBytes));
break;
}
return this.Signature;
}