Sto provando a creare un client per il nuovo protocollo tent.io in fase di sviluppo e stanno utilizzando lo schema HTTP MAC Oauth2 descritto da http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01.Autenticazione MAC HTTP con C#
Ho scritto un semplice metodo in C# che crea l'intestazione Autorizzazione, ma quando invio la mia richiesta ottengo un semplice errore "Firma MAC non valida".
Poiché non ho un'implementazione di riferimento, sto cercando di capire cosa c'è di sbagliato nel mio codice. Sto postando qui nella speranza che qualcuno possa individuare il mio errore.
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();
}
ho creare l'intestazione completa utilizzando il valore restituito e sembra qualcosa lke questo
Autorizzazione: MAC id = "a: dfsdfa2", ts = "1.349.277,638 mila", nonce = "1.469.030,797 mila", mac = "ibZ/HXaoz2VgBer3CK7K9vu0po3K + E36K + TQ9Sgcw6o ="
Sono sicuro che mi manca qualcosa di piccolo, ma non riesco a vederlo.
Qualsiasi aiuto sarebbe molto apprezzato!
È necessario riformattare il codice –