próbuję uwierzytelnić Flickr API dla aplikacji demo chcę zrobić dla siebie. Następnie rozszerzę tę aplikację o nowe funkcje, dzięki którym poznam interfejs API Flick.Nieprawidłowy podpis żądań podpisania do API Flickr (symulacja w konsoli)
Jest to po prostu coś, z czym chcę się pobawić. Ale teraz mam problem z uzyskaniem tokena żądania.
Obserwuję dokumentacji Authentication Flickr tutaj: Flickr Authentication
a ja również znaleźć ten Mathlabscript: Flickr API with OAuth-based user authentication
więc na podstawie tych źródeł mam teraz następujących aplikacji konsoli:
class Program
{
private static string Secret = "2b2b2b2b2b2b2b2b2b";
private static string ConsumerKey = "1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a";
static void Main(string[] args)
{
Random rand = new Random();
string nonce = rand.Next(9999999).ToString();
string timestamp = ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString();
Console.WriteLine("Nonce: " + nonce);
Console.WriteLine("TimeStamp: " + timestamp);
Console.WriteLine("ConsumerKey: " + ConsumerKey);
Console.WriteLine("AppSecret: " + Secret);
//request url
StringBuilder b = new StringBuilder();
b.Append("http://www.flickr.com/services/oauth/request_token");
b.Append("?");
b.Append("oauth_nonce=");
b.Append(nonce);
b.Append("&oauth_timestamp=");
b.Append(timestamp);
b.Append("&oauth_consumer_key=");
b.Append(ConsumerKey);
b.Append("&oauth_callback=oob");
b.Append("&oauth_signature_method=HMAC-SHA1");
string requesturl = b.ToString();
Console.WriteLine("RequestUrl: " + requesturl);
//base url
string basestring;
StringBuilder bs = new StringBuilder();
bs.Append("GET&");
bs.Append(UrlHelper.Encode("http://www.flickr.com/services/oauth/request_token")+"&");
basestring = bs.ToString();
StringBuilder p = new StringBuilder();
p.Append("oauth_callback=oob");
p.Append("&oauth_consumer_key=");
p.Append(ConsumerKey);
p.Append("oauth_nonce=");
p.Append(nonce);
p.Append("&oauth_signature_method=HMAC-SHA1");
p.Append("&oauth_timestamp=");
p.Append(timestamp);
string paramers = UrlHelper.Encode(p.ToString());
basestring += paramers;
Console.WriteLine("Basestring: " + basestring);
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
string key = Secret + "&";
Console.WriteLine("Key: " + key);
byte[] keyByte = encoding.GetBytes(key);
//--create message to encrypt
byte[] messageBytes = encoding.GetBytes(basestring);
//--encrypt message using hmac-sha1 with the provided key
HMACSHA1 hmacsha1 = new HMACSHA1(keyByte);
byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
//--signature
string signature = ByteToString(hashmessage);
Console.WriteLine("Signature: " + signature);
Console.WriteLine("Final Request: " + requesturl + "&oauth_signature=" + signature);
Console.ReadKey(true);
}
public static string ByteToString(byte[] buff)
{
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
{
sbinary += buff[i].ToString("X2"); // hex format
}
return (sbinary);
}
}
Kiedy przeglądam adres URL aplikacji, które mi dają, otrzymuję następującą odpowiedź:
oauth_problem=signature_invalid&debug_sbs=GET&http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Fwww.google.be%26oauth_consumer_key%3D1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a%26oauth_nonce%3D27504343%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1329469580
Wygląda na to, że mój podpis na żądanie jest nieprawidłowy.
Mam nadzieję, że ktoś pomoże mi uzyskać odpowiedni podpis na te prośby.
wiem, że to FlickNet Biblioteka że już zrobili ciężką pracę dla większości programistów, ale myślę, że może to być przydatne, aby uzyskać ten działa też. Zajrzałem do kodu źródłowego FlickrNet, ale nie znalazłem ostatecznego spokoju, aby dokończyć ten kod.
Daj mi znać, jeśli możesz mi pomóc. Byłoby wspaniale!
Dzięki!
Uwaga dla mnie: Więcej informacji na temat uwierzytelniania oauth można znaleźć tutaj: http://hueniverse.com/oauth/guide/authentication/ Spojrzę na to tak szybko, jak mogę :) – ThdK