Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
            }
        }