Tôi đang cố xác thực API Flickr cho một ứng dụng demo mà tôi muốn tạo cho chính mình. Sau đó, tôi sẽ mở rộng ứng dụng này với các tính năng mới mà tôi sẽ tìm hiểu về API của Flick.Chữ ký không hợp lệ để ký yêu cầu vào API Flickr (mô phỏng trong bảng điều khiển)
Vì vậy, đây chỉ là thứ tôi muốn chơi cùng. Nhưng bây giờ tôi gặp một số rắc rối khi nhận mã thông báo yêu cầu.
Tôi đang theo tài liệu Flickr xác thực ở đây: Flickr Authentication
Và tôi cũng thấy điều này Mathlabscript: Flickr API with OAuth-based user authentication
Vì vậy, dựa trên những nguồn tôi có bây giờ là ứng dụng giao diện điều khiển sau:
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);
}
}
Khi tôi duyệt đến url ứng dụng này cung cấp cho tôi, tôi nhận được phản hồi sau đây:
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
Dường như chữ ký của tôi cho yêu cầu không hợp lệ.
Tôi hy vọng ai đó có thể giúp tôi có được chữ ký phù hợp cho các yêu cầu này.
Tôi biết có một thư viện FlickNet đã làm công việc khó khăn cho hầu hết các nhà phát triển nhưng tôi nghĩ rằng nó có thể hữu ích để có được điều này làm việc quá. Tôi đã xem xét mã nguồn của FlickrNet nhưng không tìm thấy sự yên bình cuối cùng để hoàn thành mã này.
Hãy cho tôi biết nếu bạn có thể giúp tôi. Nó sẽ rất tuyệt vời!
Cảm ơn!
Lưu ý với chính tôi: Thông tin thêm về xác thực oauth có thể tìm thấy tại đây: http://hueniverse.com/oauth/guide/authentication/ Tôi sẽ xem xét điều này ngay khi có thể :) – ThdK