2012-10-03 34 views
5

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!

+0

Bạn cần phải định dạng lại mã của mình –

Trả lời

3

Nó chỉ ra các mã trên là hoàn hảo, nhưng tôi đã đi qua các giá trị phương thức HTTP sai vào nó!

Nơi tôi gặp phải lỗi, tôi đã được gửi JSON, nhưng tôi đã thực sự đặt "GET" vào GetAuthorizationMethod!

Khi tôi đã sửa chữa điều đó, tôi nhận được giá trị access_token từ Tent.is.

0

công cụ độc đáo được thực hiện tại http://buchananweb.co.uk/security01.aspx thấy HMAC sử dụng MD5 và SHA1, SHA256, SHA384, SHA512

+0

Mã băm của tôi đang tạo. Thật không may, tôi đã đi sai tên phương pháp, vì vậy chữ ký không hợp lệ. – tomasmcguinness

Các vấn đề liên quan