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); }
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 }
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); }
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); }