internal static string GetSignedStr()

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