示例#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);
        }
示例#2
0
文件: Program.cs 项目: denedios/hmac
        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
        }
示例#3
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);
        }
示例#4
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);
        }