in util/csharp/core/Common.cs [123:162]
internal static string GetSignedStr(TeaRequest request, string resource, string accessKeySecret)
{
// Find out the "x-opensearch-"'s address in header of the request
var tmp = new Dictionary<string, string>();
foreach (var keypair in request.Headers)
{
if (keypair.Key.ToSafeString().ToLower().StartsWith("x-opensearch-"))
{
tmp.Add(keypair.Key.ToSafeString().ToLower(), keypair.Value);
}
}
List<string> sortedKeys = tmp.Keys.ToList();
sortedKeys.Sort();
// Get the canonicalizedHeaders
string canonicalizedHeaders = string.Empty;
foreach (string key in sortedKeys)
{
canonicalizedHeaders += string.Format("{0}:{1}\n", key, tmp[key]);
}
// Give other parameters values
// when sign URL, date is expires
string contentType = request.Headers.Get("Content-Type");
string contentMd5 = request.Headers.Get("Content-MD5").ToSafeString();
string date = request.Headers.Get("Date");
string method = request.Method.ToUpper();
string signStr = string.Format("{0}\n{1}\n{2}\n{3}\n{4}{5}", method, contentMd5, contentType, date, canonicalizedHeaders, resource);
System.Diagnostics.Debug.WriteLine("Alibabacloud.OpenSearchUtil.GetSignature:stringToSign is " + signStr.ToString());
byte[] signData;
using (KeyedHashAlgorithm algorithm = CryptoConfig.CreateFromName("HMACSHA1") as KeyedHashAlgorithm)
{
algorithm.Key = Encoding.UTF8.GetBytes(accessKeySecret);
signData = algorithm.ComputeHash(Encoding.UTF8.GetBytes(signStr.ToString().ToCharArray()));
}
string signedStr = System.Convert.ToBase64String(signData);
return signedStr;
}