public void InterceptResponse(HttpResponseMessage message, ICredentialProvider credentialProvider) { if (!message.IsSuccessStatusCode) { return; } if (message.Headers.TryGetValues(Headers.X_SIGNATURE, out IEnumerable <string> headerValues)) { string actualSignature, hmacParts, expectedSignature = ""; if (credentialProvider?.HasCredentials == true) { actualSignature = headerValues.First(); } else { throw new HmacSignatureException("Credentials not available for HMAC Signature verification"); } using (var generator = new TrusonaHmacSignatureGenerator(credentialProvider.Secret)) { hmacParts = string.Join("\n", generator.GetHmacParts(new ResponseHmacMessage(message))); // debugging expectedSignature = generator.GetSignature(new ResponseHmacMessage(message)); if (expectedSignature.Equals(actualSignature)) { return; } } throw new HmacSignatureException(string.Format("Failed to verify response HMAC after {0}.\nExpected: {1} vs. actual: {2}\n{3}", message.StatusCode, expectedSignature, actualSignature, hmacParts)); } }
public void InterceptRequest(HttpRequestMessage message, ICredentialProvider credentialProvider) { if (credentialProvider == null || !credentialProvider.HasCredentials) { return; } var utcTimestamp = DateTime.Now.ToUniversalTime().ToString(rfcHttpDateFormat); message.Headers.Add(Headers.X_DATE, utcTimestamp); using (var generator = new TrusonaHmacSignatureGenerator(credentialProvider.Secret)) { string signature = generator.GetSignature(new RequestHmacMessage(message)); message.Headers.Authorization = new AuthenticationHeaderValue( scheme: scheme, parameter: GenerateHeaderParameter(credentialProvider.Token, signature)); } }