Tôi đang cố gắng tạo ứng dụng khách cho giao thức tent.io mới đang được phát triển và họ đang sử dụng lược đồ HTTP MAC Oauth2 được mô tả bởi http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01.Xác thực MAC HTTP bằng C#
Tôi đã viết một phương pháp đơn giản trong C# tạo tiêu đề Cấp quyền, nhưng khi tôi gửi yêu cầu của mình, tôi nhận được lỗi "Chữ ký MAC không hợp lệ" đơn giản.
Vì tôi không có triển khai tham chiếu, tôi đang cố gắng tìm ra điều gì sai với mã của mình. Tôi đăng nó ở đây với hy vọng rằng ai đó có thể phát hiện sai lầm của tôi.
public string GetAuthorizationHeader(string macKeyIdentifier, string macKey, string macAlgorithm, string method, Uri uri)
{
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
string timestamp = ((int)t.TotalSeconds).ToString();
string nonce = new Random().Next().ToString();
string normalizedString = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n\n",
timestamp,
nonce,
method,
uri.PathAndQuery,
uri.Host,
uri.Port);
HashAlgorithm hashGenerator = null;
if (macAlgorithm == "hmac-sha-256")
{
hashGenerator = new HMACSHA256(Encoding.ASCII.GetBytes(macKey));
}
else if (macAlgorithm == "hmac-sha-1")
{
hashGenerator = new HMACSHA1(Encoding.ASCII.GetBytes(macKey));
}
else
{
throw new InvalidOperationException("Unsupported MAC algorithm");
}
string hash = System.Convert.ToBase64String(hashGenerator.ComputeHash(Encoding.ASCII.GetBytes(normalizedString)));
StringBuilder authorizationHeader = new StringBuilder();
authorizationHeader.AppendFormat(@"id=""{0}"",ts=""{1}"",nonce=""{2}"",mac=""{3}""",
macKeyIdentifier, timestamp, nonce, hash);
return authorizationHeader.ToString();
}
tôi tạo đầy đủ các tiêu đề bằng cách sử dụng giá trị trả về và có vẻ gì đó lke
Authorization này: MAC id = "a: dfsdfa2", ts = "1349277638", nonce = "1469030797", mac = "ibZ/HXaoz2VgBer3CK7K9vu0po3K + E36K + TQ9Sgcw6o ="
Tôi chắc rằng mình thiếu một số thứ nhỏ, nhưng tôi không thể nhìn thấy nó.
Mọi trợ giúp sẽ được đánh giá rất nhiều!
Bạn cần phải định dạng lại mã của mình –