Esempio n. 1
0
        public void ShouldAuthenticate()
        {
            // Arrange
            IHmacConfiguration   configuration = CreateConfiguration();
            IRestSharpHmacSigner signer        = new RestSharpHmacSigner(configuration, _keyRepository);
            HmacAuthenticator    authenticator = new HmacAuthenticator(configuration, signer);
            IRestClient          client        = CreateClient();
            IRestRequest         request       = CreateRequest(configuration);

            // Act
            authenticator.Authenticate(client, request);
            Parameter         contentMd5Param    = request.Parameters.FirstOrDefault(p => p.Name == "Content-MD5");
            Parameter         authorizationParam = request.Parameters.FirstOrDefault(p => p.Name == "Authorization");
            Parameter         dateParam          = request.Parameters.FirstOrDefault(p => p.Name == "Date");
            string            dateString         = dateParam != null ? dateParam.Value as string ?? string.Empty : string.Empty;
            DateTimeOffset    parsedDate;
            bool              isValidDate   = DateTimeOffset.TryParseExact(dateString, "ddd, dd MMM yyyy HH:mm:ss G\\MT", _dateHeaderCulture, DateTimeStyles.AssumeUniversal, out parsedDate);
            HmacSignatureData signatureData = signer.GetSignatureDataFromRestRequest(client, request);
            string            signature     = signer.CreateSignature(signatureData);

            // Assert
            Assert.IsNotNull(contentMd5Param);
            Assert.AreEqual(ParameterType.HttpHeader, contentMd5Param.Type);
            Assert.AreEqual(_base64Md5Hash, contentMd5Param.Value);
            Assert.IsNotNull(authorizationParam);
            Assert.AreEqual(ParameterType.HttpHeader, authorizationParam.Type);
            Assert.IsNotNull(authorizationParam.Value);
            Assert.IsInstanceOfType(authorizationParam.Value, typeof(string));
            Assert.AreEqual((string)authorizationParam.Value, "HMAC " + signature);
            Assert.IsNotNull(dateParam);
            Assert.AreEqual(ParameterType.HttpHeader, dateParam.Type);
            Assert.IsNotNull(dateParam.Value);
            Assert.IsTrue(isValidDate);
        }
Esempio n. 2
0
        private IRestRequest CreateRequest(IHmacConfiguration configuration)
        {
            List <Parameter> parameters = new List <Parameter>
            {
                new Parameter {
                    Name = ContentType, Value = Body, Type = ParameterType.RequestBody
                },
                new Parameter {
                    Name = configuration.UserHeaderName, Value = _keyRepository.Username, Type = ParameterType.HttpHeader
                },
                new Parameter {
                    Name = "X-Custom-Test-Header-1", Value = "Test1", Type = ParameterType.HttpHeader
                },
                new Parameter {
                    Name = "X-Custom-Test-Header-2", Value = "Test2", Type = ParameterType.HttpHeader
                }
            };

            Mock <IRestRequest> mockRequest = new Mock <IRestRequest>();

            mockRequest.Setup(r => r.Method).Returns(Method.POST);
            mockRequest.Setup(r => r.Parameters).Returns(parameters);
            mockRequest
            .Setup(r => r.AddParameter(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <ParameterType>()))
            .Callback((string name, object value, ParameterType type) => parameters.Add(new Parameter {
                Name = name, Value = value, Type = type
            }));
            return(mockRequest.Object);
        }
Esempio n. 3
0
        public HmacClient(IHmacConfiguration hmacConfiguration, string credential, Func <IWorkContext, Task <string> > getHmacKey)
            : this(hmacConfiguration, credential)
        {
            Verify.IsNotNull(nameof(getHmacKey), getHmacKey);

            _getHmacKey = getHmacKey;
        }
Esempio n. 4
0
        public HmacClient(IHmacConfiguration hmacConfiguration, string credential, string hmacKey)
            : this(hmacConfiguration, credential)
        {
            Verify.IsNotEmpty(nameof(hmacKey), hmacKey);

            HmacKey = hmacKey;
        }
Esempio n. 5
0
        public void ShouldCreateSignature()
        {
            // Arrange
            IHmacConfiguration configuration = CreateConfiguration();
            HmacSigner         signer        = new HmacSigner(configuration, _keyRepository);
            HmacSignatureData  signatureData = new HmacSignatureData
            {
                Key         = _keyRepository.Key,
                HttpMethod  = "POST",
                ContentMd5  = _base64Md5Hash,
                ContentType = ContentType,
                Date        = "Wed, 30 Dec 2015 12:30:45 GMT",
                Username    = _keyRepository.Username,
                RequestUri  = Url,
                Headers     = new NameValueCollection {
                    { "X-Custom-Test-Header-1", "Test1" }, { "X-Custom-Test-Header-2", "Test2" }
                }
            };
            const string expectedSignature = "CSDWHwt5sOWkBKS5mSNWrgJaXREQB6CKywVyB/A4IDQ65h3gzR9/Uutug34ikpcW3JlnVyAL+xbu/eNaq99q/Q==";

            HmacSignatureData signatureData2 = new HmacSignatureData {
                Key = _keyRepository.Key
            };
            const string expectedSignature2 = "QwPLzI1RUBRyYerrolY3+4Mzuw8Z07YfxnpP9va2ckH/I7UvdPBMkcaomWOaC5pZym9x+t/BA/2VTP6pjje1DQ==";

            // Act
            string signature  = signer.CreateSignature(signatureData);
            string signature2 = signer.CreateSignature(signatureData2);

            // Assert
            Assert.IsNotNull(signature);
            Assert.AreEqual(expectedSignature, signature);
            Assert.IsNotNull(signature2);
            Assert.AreEqual(expectedSignature2, signature2);
        }
Esempio n. 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="HmacSigner"/> class using the specified configuration and key repository.
        /// </summary>
        /// <param name="configuration">The configuration used for signing.</param>
        /// <param name="keyRepository">The repository used for retrieving the key associated with the user.</param>
        /// <exception cref="ArgumentNullException">The configuration or key repository is null.</exception>
        /// <exception cref="HmacConfigurationException">The configured signature encoding is invalid.</exception>
        public HmacSigner(IHmacConfiguration configuration, IHmacKeyRepository keyRepository)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration), "The configuration cannot be null.");
            }
            if (keyRepository == null)
            {
                throw new ArgumentNullException(nameof(keyRepository), "The key repository cannot be null.");
            }

            HmacConfiguration = configuration;
            HmacKeyRepository = keyRepository;
            DateHeaderCulture = new CultureInfo(HmacConstants.DateHeaderCulture);
            Md5 = MD5.Create();

            try
            {
                SignatureEncoding = Encoding.GetEncoding(configuration.SignatureEncoding);
            }
            catch (ArgumentException ex)
            {
                throw new HmacConfigurationException("The configured signature encoding is invalid.", ex);
            }
        }
Esempio n. 7
0
        public void ShouldFailToValidateContentMd5()
        {
            // Arrange
            IHmacConfiguration configuration = CreateConfiguration();
            IHmacSigner        signer        = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator     = new HmacValidator(configuration, signer);

            const string incorrectBody = Body + "Modified";

            byte[] incorrectBodyBytes  = Encoding.UTF8.GetBytes(incorrectBody);
            Stream incorrectBodyStream = new MemoryStream(incorrectBodyBytes);

            // Act
            bool stringIsValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, incorrectBody, Encoding.UTF8);
            bool stringIsValidByteArray = validator.IsValidContentMd5(_md5Hash, incorrectBody, Encoding.UTF8);
            bool bytesAreValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, incorrectBodyBytes);
            bool bytesAreValidByteArray = validator.IsValidContentMd5(_md5Hash, incorrectBodyBytes);
            bool streamIsValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, incorrectBodyStream);
            bool streamIsValidByteArray = validator.IsValidContentMd5(_md5Hash, incorrectBodyStream);

            incorrectBodyStream.Dispose();

            // Assert
            Assert.IsFalse(stringIsValidBase64);
            Assert.IsFalse(stringIsValidByteArray);
            Assert.IsFalse(bytesAreValidBase64);
            Assert.IsFalse(bytesAreValidByteArray);
            Assert.IsFalse(streamIsValidBase64);
            Assert.IsFalse(streamIsValidByteArray);
        }
Esempio n. 8
0
        public void ShouldFailValidationDueToMissingKey()
        {
            // Arrange
            Mock <IHmacKeyRepository> mockKeyRepo = new Mock <IHmacKeyRepository>();

            mockKeyRepo.Setup(r => r.GetHmacKeyForUsername(It.IsAny <string>())).Returns((string)null);
            IHmacConfiguration configuration  = CreateConfiguration();
            IHmacSigner        signer         = new HmacSigner(configuration, mockKeyRepo.Object);
            HmacValidator      validator      = new HmacValidator(configuration, signer);
            DateTimeOffset     dateTimeOffset = DateTimeOffset.UtcNow.AddMinutes(-3);
            string             dateString     = dateTimeOffset.ToString(HmacConstants.DateHeaderFormat, _dateHeaderCulture);
            HttpRequestBase    request        = CreateRequest(dateString);
            HmacSignatureData  signatureData  = signer.GetSignatureDataFromHttpRequest(request);

            signatureData.Key = "TestKey";
            string signature = signer.CreateSignature(signatureData);

            request.Headers[HmacConstants.AuthorizationHeaderName] = string.Format(
                HmacConstants.AuthorizationHeaderFormat,
                configuration.AuthorizationScheme,
                signature);

            // Act
            HmacValidationResult result = validator.ValidateHttpRequest(request);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.ErrorMessage);
            Assert.AreEqual(result.ResultCode, HmacValidationResultCode.KeyMissing);
        }
Esempio n. 9
0
        public HmacSignature(IHmacConfiguration hmacConfiguration, TimeSpan?validFor = null)
        {
            Verify.IsNotNull(nameof(hmacConfiguration), hmacConfiguration);

            _hmacConfiguration = hmacConfiguration;
            _validFor          = validFor ?? TimeSpan.FromMinutes(5);
        }
        public void ShouldGetDefaultConfiguration()
        {
            // Arrange
            HmacConfigurationManager configurationManager  = new HmacConfigurationManager();
            HmacConfiguration        expectedConfiguration = new HmacConfiguration
            {
                Name                   = configurationManager.DefaultConfigurationKey,
                UserHeaderName         = "X-Auth-User",
                AuthorizationScheme    = "HMAC",
                SignatureDataSeparator = "\n",
                SignatureEncoding      = "UTF-8",
                HmacAlgorithm          = "HMACSHA512",
                MaxRequestAge          = TimeSpan.FromMinutes(5),
                SignRequestUri         = true,
                ValidateContentMd5     = true,
                Headers                = null
            };

            // Act
            IHmacConfiguration defaultConfigByKey = configurationManager.Get(configurationManager.DefaultConfigurationKey);
            IHmacConfiguration defaultConfig      = configurationManager.GetDefault();

            // Assert
            AssertConfiguration(expectedConfiguration, defaultConfigByKey);
            AssertConfiguration(expectedConfiguration, defaultConfig);
        }
        private void AssertConfiguration(IHmacConfiguration expected, IHmacConfiguration actual)
        {
            if (expected == null)
            {
                Assert.IsNull(actual);
                return;
            }

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.UserHeaderName, actual.UserHeaderName);
            Assert.AreEqual(expected.AuthorizationScheme, actual.AuthorizationScheme);
            Assert.AreEqual(expected.SignatureDataSeparator, actual.SignatureDataSeparator);
            Assert.AreEqual(expected.SignatureEncoding, actual.SignatureEncoding);
            Assert.AreEqual(expected.HmacAlgorithm, actual.HmacAlgorithm);
            Assert.AreEqual(expected.MaxRequestAge, actual.MaxRequestAge);
            Assert.AreEqual(expected.SignRequestUri, actual.SignRequestUri);

            if (expected.Headers != null)
            {
                Assert.IsNotNull(actual.Headers);
                Assert.IsTrue(expected.Headers.OrderBy(h => h).SequenceEqual(actual.Headers.OrderBy(h => h)));
            }
            else
            {
                Assert.IsNull(actual.Headers);
            }
        }
        public void ShouldConfigureFromFile()
        {
            // Arrange
            HmacConfigurationManager configurationManager  = new HmacConfigurationManager();
            HmacConfiguration        expectedConfiguration = new HmacConfiguration
            {
                Name                   = "TestConfiguration",
                UserHeaderName         = "X-Test-User",
                AuthorizationScheme    = "TEST",
                SignatureDataSeparator = "_",
                SignatureEncoding      = "UTF-32",
                HmacAlgorithm          = "HMACSHA256",
                MaxRequestAge          = TimeSpan.FromMinutes(2),
                SignRequestUri         = false,
                ValidateContentMd5     = true,
                Headers                = new List <string> {
                    "X-Test-Header-1", "X-Test-Header-2"
                }
            };

            // Act
            configurationManager.ConfigureFromFile("Hmac.config");
            IHmacConfiguration configuration = configurationManager.Get(expectedConfiguration.Name);

            // Assert
            AssertConfiguration(expectedConfiguration, configuration);
        }
Esempio n. 13
0
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
            {
                return;
            }

            IHmacConfiguration configuration = _configurationManager.Get("Example");
            IHmacSigner        signer        = new HmacSigner(configuration, _keyRepository);
            IHmacValidator     validator     = new HmacValidator(configuration, signer);

            HmacValidationResult result = validator.ValidateHttpRequest(filterContext.HttpContext.Request);

            if (result.ResultCode == HmacValidationResultCode.Ok)
            {
                return;
            }

            HttpResponseBase response = filterContext.HttpContext.Response;

            validator.AddWwwAuthenticateHeader(response, configuration.AuthorizationScheme);
            response.Headers.Add("X-Auth-ErrorCode", result.ResultCode.ToString());
            response.StatusCode = (int)HttpStatusCode.Unauthorized;
            response.Write(result.ErrorMessage);
            response.End();
        }
Esempio n. 14
0
        public void ShouldFailValidationDueToMissingDate()
        {
            // Arrange
            IHmacConfiguration configuration  = CreateConfiguration();
            IHmacSigner        signer         = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator      = new HmacValidator(configuration, signer);
            DateTimeOffset     dateTimeOffset = DateTimeOffset.UtcNow.AddMinutes(-3);
            string             dateString     = dateTimeOffset.ToString(HmacConstants.DateHeaderFormat, _dateHeaderCulture);
            HttpRequestBase    request        = CreateRequest(dateString);
            HmacSignatureData  signatureData  = signer.GetSignatureDataFromHttpRequest(request);
            string             signature      = signer.CreateSignature(signatureData);

            request.Headers[HmacConstants.AuthorizationHeaderName] = string.Format(
                HmacConstants.AuthorizationHeaderFormat,
                configuration.AuthorizationScheme,
                signature);

            request.Headers.Remove(HmacConstants.DateHeaderName);

            // Act
            HmacValidationResult result = validator.ValidateHttpRequest(request);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.ErrorMessage);
            Assert.AreEqual(result.ResultCode, HmacValidationResultCode.DateMissing);
        }
Esempio n. 15
0
        static void Main()
        {
            // Retrieve the server URL
            string serverBaseUrl = ConfigurationManager.AppSettings["ServerBaseUrl"];

            // Setup the signer
            IHmacConfigurationManager configurationManager = new HmacConfigurationManager();

            configurationManager.ConfigureFromFile("Hmac.config");
            IHmacConfiguration   configuration = configurationManager.Get("Example");
            IHmacKeyRepository   keyRepository = new SingleHmacKeyRepository("FollowTheWhiteRabbit");
            IRestSharpHmacSigner signer        = new RestSharpHmacSigner(configuration, keyRepository);

            // Setup the RestSharp client
            IRestClient client = new RestClient(serverBaseUrl);

            client.AddHandler("application/json", new JsonDeserializer());
            client.Authenticator = new HmacAuthenticator(configuration, signer);
            client.AddDefaultHeader("X-Custom-Header", "Knock knock...");

            // Execute the GET request
            Console.WriteLine("Neo searches for a spoon.");
            IRestRequest getRequest = new RestRequest("spoon", Method.GET);

            getRequest.AddHeader(configuration.UserHeaderName, "Neo");
            IRestResponse <ExampleModel> getResponse = client.Execute <ExampleModel>(getRequest);

            Console.WriteLine("  There is a '{0}'!", getResponse.Data.Value);

            // Execute the POST request
            Console.WriteLine("Neo posts his sunglasses.");
            IRestRequest postRequest = new RestRequest(Method.POST);

            postRequest.RequestFormat = DataFormat.Json;
            postRequest.AddHeader(configuration.UserHeaderName, "Neo");
            postRequest.AddBody(new ExampleModel {
                Value = "sunglasses"
            });
            IRestResponse postResponse = client.Execute(postRequest);

            Console.WriteLine("  {0}", postResponse.Content);

            // Execute GET request with an incorrect username
            Console.WriteLine("Morpheus searches for The One.");
            IRestRequest incorrectGetRequest = new RestRequest("The One", Method.GET);

            incorrectGetRequest.AddHeader(configuration.UserHeaderName, "Morpheus");
            IRestResponse incorrectGetResponse = client.Execute(incorrectGetRequest);

            Console.WriteLine("  {0}", incorrectGetResponse.Content);

#if DEBUG
            if (Debugger.IsAttached)
            {
                Console.WriteLine("Press any key to continue . . .");
                Console.ReadKey(true);
            }
#endif
        }
Esempio n. 16
0
        private HmacClient(IHmacConfiguration hmacConfiguration, string credential)
        {
            Verify.IsNotNull(nameof(hmacConfiguration), hmacConfiguration);
            Verify.IsNotEmpty(nameof(credential), credential);

            HmacConfiguration = hmacConfiguration;
            Credential        = credential;
        }
Esempio n. 17
0
        public HmacMiddleware(RequestDelegate next, IIdentityRepository identityRepository, IHmacConfiguration hmacConfiguration)
        {
            Verify.IsNotNull(nameof(next), next);

            _next = next;
            _identityRepository = identityRepository;
            _hmacConfiguration  = hmacConfiguration;
        }
Esempio n. 18
0
        /// <summary>
        /// Initializes a new instance of the <see cref="HmacValidator"/> class using the specified configuration and signer.
        /// </summary>
        /// <param name="configuration">The configuration used for signing and validating.</param>
        /// <param name="signer">The signer to use for creating a signature.</param>
        /// <exception cref="ArgumentNullException">The configuration or signer is null.</exception>
        public HmacValidator(IHmacConfiguration configuration, IHmacSigner signer)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration), "The configuration cannot be null.");
            }
            if (signer == null)
            {
                throw new ArgumentNullException(nameof(signer), "The signer cannot be null.");
            }

            HmacConfiguration = configuration;
            HmacSigner        = signer;
            DateHeaderCulture = new CultureInfo(HmacConstants.DateHeaderCulture);
        }
Esempio n. 19
0
        public void ShouldSetAuthorizationHeader()
        {
            // Arrange
            const string       signature     = "TEST_SIGNATURE";
            IHmacConfiguration configuration = CreateConfiguration();
            HttpRequestBase    request       = CreateRequest(string.Empty);
            HmacSigner         signer        = new HmacSigner(configuration, _keyRepository);

            // Act
            signer.SetAuthorizationHeader(request, signature);
            string headerValue = request.Headers["Authorization"];

            // Assert
            Assert.IsNotNull(headerValue);
            Assert.AreEqual("HMAC TEST_SIGNATURE", headerValue);
        }
Esempio n. 20
0
        public void ShouldAddAuthorizationHeader()
        {
            // Arrange
            const string        signature     = "TEST_SIGNATURE";
            IHmacConfiguration  configuration = CreateConfiguration();
            IRestRequest        request       = CreateRequest(configuration, string.Empty);
            RestSharpHmacSigner signer        = new RestSharpHmacSigner(configuration, _keyRepository);

            // Act
            signer.AddAuthorizationHeader(request, signature);
            Parameter param = request.Parameters.FirstOrDefault(p => p.Name == "Authorization");

            // Assert
            Assert.IsNotNull(param);
            Assert.AreEqual($"{configuration.AuthorizationScheme} {signature}", param.Value);
            Assert.AreEqual(ParameterType.HttpHeader, param.Type);
        }
Esempio n. 21
0
        public void ShouldAddWwwAuthenticateHeader()
        {
            // Arrange
            const string       headerValue   = "HMAC_TEST";
            IHmacConfiguration configuration = CreateConfiguration();
            HttpResponseBase   response      = CreateResponse(string.Empty);
            HmacSigner         signer        = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator     = new HmacValidator(configuration, signer);

            // Act
            validator.AddWwwAuthenticateHeader(response, headerValue);
            string actualHeaderValue = response.Headers["WWW-Authenticate"];

            // Assert
            Assert.IsNotNull(actualHeaderValue);
            Assert.AreEqual(headerValue, actualHeaderValue);
        }
Esempio n. 22
0
        public void ShouldFailToValidateRequestDate()
        {
            // Arrange
            IHmacConfiguration configuration  = CreateConfiguration();
            IHmacSigner        signer         = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator      = new HmacValidator(configuration, signer);
            DateTimeOffset     dateTimeOffset = DateTimeOffset.UtcNow.AddMinutes(-6);
            string             dateString     = dateTimeOffset.ToString(HmacConstants.DateHeaderFormat, _dateHeaderCulture);
            DateTime           dateTime       = dateTimeOffset.UtcDateTime;

            // Act
            bool isValidDateTimeOffset = validator.IsValidRequestDate(dateTimeOffset);
            bool isValidDateString     = validator.IsValidRequestDate(dateString, HmacConstants.DateHeaderFormat);
            bool isValidDateTime       = validator.IsValidRequestDate(dateTime);

            // Assert
            Assert.IsFalse(isValidDateString);
            Assert.IsFalse(isValidDateTime);
            Assert.IsFalse(isValidDateTimeOffset);
        }
Esempio n. 23
0
        public void ShouldFailValidationDueToInvalidAuthorization()
        {
            // Arrange
            IHmacConfiguration configuration  = CreateConfiguration();
            IHmacSigner        signer         = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator      = new HmacValidator(configuration, signer);
            DateTimeOffset     dateTimeOffset = DateTimeOffset.UtcNow.AddMinutes(-3);
            string             dateString     = dateTimeOffset.ToString(HmacConstants.DateHeaderFormat, _dateHeaderCulture);
            HttpRequestBase    request        = CreateRequest(dateString);

            request.Headers[HmacConstants.AuthorizationHeaderName] = "blahblah";

            // Act
            HmacValidationResult result = validator.ValidateHttpRequest(request);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.ErrorMessage);
            Assert.AreEqual(result.ResultCode, HmacValidationResultCode.AuthorizationInvalid);
        }
Esempio n. 24
0
        public void ShouldFailToValidateSignature()
        {
            // Arrange
            IHmacConfiguration configuration    = CreateConfiguration();
            IHmacSigner        signer           = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator        = new HmacValidator(configuration, signer);
            const string       signatureString1 = "SIGNATURE_STRING";
            const string       signatureString2 = "SIGNATURE_STRING_DIFFERENT";

            byte[] signatureBytes1 = Encoding.UTF8.GetBytes(signatureString1);
            byte[] signatureBytes2 = Encoding.UTF8.GetBytes(signatureString2);

            // Act
            bool isValidString    = validator.IsValidSignature(signatureString1, signatureString2);
            bool isValidByteArray = validator.IsValidSignature(signatureBytes1, signatureBytes2);

            // Assert
            Assert.IsFalse(isValidString);
            Assert.IsFalse(isValidByteArray);
        }
Esempio n. 25
0
        public void ShouldGetSignatureDataFromHttpRequest()
        {
            // Arrange
            IHmacConfiguration configuration = CreateConfiguration();
            string             dateString    = CreateHttpDateString();
            HttpRequestBase    request       = CreateRequest(dateString);
            HmacSigner         signer        = new HmacSigner(configuration, _keyRepository);

            // Act
            HmacSignatureData signatureData = signer.GetSignatureDataFromHttpRequest(request);

            // Assert
            Assert.IsNotNull(signatureData);
            Assert.AreEqual(_keyRepository.Key, signatureData.Key);
            Assert.AreEqual(request.HttpMethod, signatureData.HttpMethod);
            Assert.AreEqual(_base64Md5Hash, signatureData.ContentMd5);
            Assert.AreEqual(ContentType, signatureData.ContentType);
            Assert.AreEqual(dateString, signatureData.Date);
            Assert.AreEqual(_keyRepository.Username, signatureData.Username);
            Assert.AreEqual(Url, signatureData.RequestUri);
            Assert.IsNotNull(signatureData.Headers);
            Assert.IsTrue(signatureData.Headers.Count > 0);
        }
Esempio n. 26
0
        public void ShouldValidateContentMd5()
        {
            // Arrange
            IHmacConfiguration configuration = CreateConfiguration();
            IHmacSigner        signer        = new HmacSigner(configuration, _keyRepository);
            HmacValidator      validator     = new HmacValidator(configuration, signer);

            // Act
            bool stringIsValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, Body, Encoding.UTF8);
            bool stringIsValidByteArray = validator.IsValidContentMd5(_md5Hash, Body, Encoding.UTF8);
            bool bytesAreValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, _bodyBytes);
            bool bytesAreValidByteArray = validator.IsValidContentMd5(_md5Hash, _bodyBytes);
            bool streamIsValidBase64    = validator.IsValidContentMd5(_base64Md5Hash, _bodyStream);
            bool streamIsValidByteArray = validator.IsValidContentMd5(_md5Hash, _bodyStream);

            // Assert
            Assert.IsTrue(stringIsValidBase64);
            Assert.IsTrue(stringIsValidByteArray);
            Assert.IsTrue(bytesAreValidBase64);
            Assert.IsTrue(bytesAreValidByteArray);
            Assert.IsTrue(streamIsValidBase64);
            Assert.IsTrue(streamIsValidByteArray);
        }
        public void ShouldConfigureFromFileAndWatch()
        {
            // Arrange
            HmacConfigurationManager configurationManager = new HmacConfigurationManager();
            const string             name = "TestConfiguration";
            const string             originalAuthScheme = "TEST";
            const string             modifiedAuthScheme = "TEST_MODIFIED";

            // Act
            configurationManager.ConfigureFromFileAndWatch("Hmac.config");
            IHmacConfiguration configuration = configurationManager.Get(name);

            using (StreamWriter writer = new StreamWriter("Hmac.config", false, Encoding.UTF8))
            {
                writer.Write(_hmacModifiedConfig);
                writer.Flush();
            }
            Thread.Sleep(1500);
            IHmacConfiguration modifiedConfiguration = configurationManager.Get(name);
            IHmacConfiguration defaultConfiguration  = configurationManager.Get(configurationManager.DefaultConfigurationKey);

            using (StreamWriter writer = new StreamWriter("Hmac.config", false, Encoding.UTF8))
            {
                writer.Write(_hmacConfig);
                writer.Flush();
            }

            // Assert
            Assert.IsNotNull(configuration);
            Assert.AreEqual(name, configuration.Name);
            Assert.AreEqual(originalAuthScheme, configuration.AuthorizationScheme);
            Assert.IsNotNull(configuration);
            Assert.AreEqual(name, modifiedConfiguration.Name);
            Assert.AreEqual(modifiedAuthScheme, modifiedConfiguration.AuthorizationScheme);
            Assert.IsNotNull(defaultConfiguration);
            Assert.AreEqual(configurationManager.DefaultConfigurationKey, defaultConfiguration.Name);
        }
Esempio n. 28
0
        public void ShouldGetSignatureDataFromRestRequest()
        {
            // Arrange
            IHmacConfiguration  configuration = CreateConfiguration();
            string              dateString    = CreateHttpDateString();
            IRestClient         client        = CreateClient();
            IRestRequest        request       = CreateRequest(configuration, dateString);
            RestSharpHmacSigner signer        = new RestSharpHmacSigner(configuration, _keyRepository);

            // Act
            HmacSignatureData signatureData = signer.GetSignatureDataFromRestRequest(client, request);

            // Assert
            Assert.IsNotNull(signatureData);
            Assert.AreEqual(_keyRepository.Key, signatureData.Key);
            Assert.AreEqual(request.Method.ToString().ToUpperInvariant(), signatureData.HttpMethod);
            Assert.AreEqual(_base64Md5Hash, signatureData.ContentMd5);
            Assert.AreEqual(ContentType, signatureData.ContentType);
            Assert.AreEqual(dateString, signatureData.Date);
            Assert.AreEqual(_keyRepository.Username, signatureData.Username);
            Assert.AreEqual(Url, signatureData.RequestUri);
            Assert.IsNotNull(signatureData.Headers);
            Assert.IsTrue(signatureData.Headers.Count > 0);
        }
Esempio n. 29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RestSharpHmacSigner"/> class using the specified configuration and key repository.
 /// </summary>
 /// <param name="configuration">The configuration used for signing.</param>
 /// <param name="keyRepository">The repository used for retrieving the key associated with the user.</param>
 /// <exception cref="ArgumentNullException">The configuration or key repository is null.</exception>
 public RestSharpHmacSigner(IHmacConfiguration configuration, IHmacKeyRepository keyRepository)
     : base(configuration, keyRepository)
 {
 }