private static void AuthQuery()

in src/AlibabaCloud.OSS.V2/Signer/SignerV4.cs [34:102]


        private static void AuthQuery(SigningContext signingContext)
        {
            var request = signingContext.Request;
            var credentials = signingContext.Credentials;
            var region = signingContext.Region ?? "";
            var product = signingContext.Product ?? "";

            // Date
            var signTime = signingContext.SignTime ?? DateTime.UtcNow;
            var datetime = FormatDateTime(signTime);
            var date = FormatDate(signTime);

            // Expiration 
            var expiration = signingContext.Expiration ?? DateTime.UtcNow.AddMinutes(15);
            var expires = ((long)expiration.Subtract(signTime).TotalSeconds).ToString(CultureInfo.InvariantCulture);

            // Scope
            var scope = $"{date}/{region}/{product}/aliyun_v4_request";

            // Headers
            var headers = request!.Headers;

            var additionalHeaders = GetAdditionalHeaders(headers, signingContext.AdditionalHeaders);
            additionalHeaders.Sort();

            // Credentials information
            var parameters = new Dictionary<string, string>();
            if (credentials!.SecurityToken.IsNotEmpty()) parameters.Add("x-oss-security-token", credentials.SecurityToken);
            parameters.Add("x-oss-signature-version", "OSS4-HMAC-SHA256");
            parameters.Add("x-oss-date", datetime);
            parameters.Add("x-oss-expires", expires);
            parameters.Add("x-oss-credential", $"{credentials.AccessKeyId}/{scope}");

            if (additionalHeaders.Count > 0)
                parameters.Add("x-oss-additional-headers", additionalHeaders.JoinToString(";"));

            // update query 
            var queryStr = parameters
                .Select(
                    x => x.Value.IsEmpty() ? x.Key.UrlEncode() : x.Key.UrlEncode() + "=" + x.Value.UrlEncode()
                )
                .JoinToString("&");
            request.RequestUri = request.RequestUri.AppendToQuery(queryStr);

            // CanonicalRequest
            var canonicalRequest = CanonicalizeRequest(
                request,
                ResourcePath(signingContext.Bucket, signingContext.Key),
                headers,
                additionalHeaders
            );

            // StringToSign
            var stringToSign = CalcStringToSign(datetime, scope, canonicalRequest);

            // Signature
            var signature = CalcSignature(credentials.AccessKeySecret, date, region, product, stringToSign);

            // Credential
            request.RequestUri = request.RequestUri.AppendToQuery($"x-oss-signature={signature.UrlEncode()}");

            //Console.WriteLine("canonicalRequest:{0}\n", canonicalRequest);
            //Console.WriteLine("stringToSign:{0}\n", stringToSign);
            //Console.WriteLine("signature:{0}\n", signature);
            //update
            signingContext.Request = request;
            signingContext.Expiration = expiration;
            signingContext.StringToSign = stringToSign;
        }