Ich arbeite mit einer API, die OAuth 1.0 verwendet. Es gibt keine Dokumentation auf der Website für die API, außer dass sie die Standardmethode verwendet. Ich habe den Leitfaden auf der Twitter-Seite hier https://dev.twitter.com/oauth/overview/creating-signatures verfolgt.Ungültige Signatur mit OAuth 1.0 API
Alles scheint mir gut zu sein, aber ich bekomme immer eine Nachricht, dass ich eine ungültige Signatur habe. Ich habe mit einer Klasse begonnen, die ich auf GitHub gefunden habe, und ich bekam den Signaturfehler. Die Klasse war massiv kompliziert, also schrieb ich meine eigene einfache Klasse (mit C#). Ich habe einen Konstruktor, der alle hier verwendeten Werte richtig setzt. Im 100% sicher, es gibt keine fehlenden Daten, das Problem muss sein, wie die Signatur/Anfrage erzeugt wird, aber soweit ich sehen kann, wurde alles richtig eingerichtet. Der Ausgabe-Header sieht korrekt aus und alles ist ausgefüllt. Irgendwelche Ideen was ist falsch?
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;
}