From c32800da441ec9ef4cedb64c03e66ea1a8580b5c Mon Sep 17 00:00:00 2001 From: janireu Date: 2021年1月29日 10:13:14 +0000 Subject: [PATCH] Signing with InvariantCulture, so different calendars produce good output. --- .../SignUtilTests.cs | 27 +++++++++++++++++++ .../Elasticsearch.Net.Aws/SignV4Util.cs | 5 ++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/Elasticsearch.Net.Aws/ElasticSearch.Net.Aws.Tests/SignUtilTests.cs b/src/Elasticsearch.Net.Aws/ElasticSearch.Net.Aws.Tests/SignUtilTests.cs index a493288..799f71e 100644 --- a/src/Elasticsearch.Net.Aws/ElasticSearch.Net.Aws.Tests/SignUtilTests.cs +++ b/src/Elasticsearch.Net.Aws/ElasticSearch.Net.Aws.Tests/SignUtilTests.cs @@ -1,6 +1,8 @@ using System; using System.Diagnostics; +using System.Globalization; using System.Text; +using System.Threading; using Amazon.Runtime; using Elasticsearch.Net.Aws; using NUnit.Framework; @@ -101,6 +103,31 @@ public void SignRequest_should_apply_signature_to_request() Trace.WriteLine("Token: " + token); } + [Test] + public void SignRequest_should_apply_signature_to_request_right_culture() + { + Thread.CurrentThread.CurrentCulture = new CultureInfo("th"); + + var creds = new SessionAWSCredentials("ExampleKey", "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY", "token1") + .GetCredentials(); + SignV4Util.SignRequest(_sampleRequest, _sampleBody, creds, "us-east-1", "iam"); + + var amzDateValue = _sampleRequest.Headers.XAmzDate; + Assert.False(String.IsNullOrEmpty(amzDateValue)); + var amzDates = amzDateValue.Split(','); + Assert.AreEqual(2, amzDates.Length); + Assert.True(amzDates[1].StartsWith(DateTime.UtcNow.Year.ToString())); + Trace.WriteLine("X-Amz-Date: " + amzDateValue); + + var auth = _sampleRequest.Headers.Authorization; + Assert.False(String.IsNullOrEmpty(auth)); + Trace.WriteLine("Authorize: " + auth); + + var token = _sampleRequest.Headers.XAmzSecurityToken; + Assert.False(String.IsNullOrEmpty(token)); + Trace.WriteLine("Token: " + token); + } + [Test] public void GetCanonicalQueryString_should_match_sample() { diff --git a/src/Elasticsearch.Net.Aws/Elasticsearch.Net.Aws/SignV4Util.cs b/src/Elasticsearch.Net.Aws/Elasticsearch.Net.Aws/SignV4Util.cs index 5201d4f..c94bdd8 100644 --- a/src/Elasticsearch.Net.Aws/Elasticsearch.Net.Aws/SignV4Util.cs +++ b/src/Elasticsearch.Net.Aws/Elasticsearch.Net.Aws/SignV4Util.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Security.Cryptography; using System.Text; @@ -18,8 +19,8 @@ internal static class SignV4Util public static void SignRequest(IRequest request, byte[] body, ImmutableCredentials credentials, string region, string service) { var date = DateTime.UtcNow; - var dateStamp = date.ToString("yyyyMMdd"); - var amzDate = date.ToString("yyyyMMddTHHmmssZ"); + var dateStamp = date.ToString("yyyyMMdd", CultureInfo.InvariantCulture); + var amzDate = date.ToString("yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture); request.Headers.XAmzDate = amzDate; var signingKey = GetSigningKey(credentials.SecretKey, dateStamp, region, service);

AltStyle によって変換されたページ (->オリジナル) /