Ejemplo n.º 1
0
        public override HttpRequest SignRequest(Signer signer, AlibabaCloudCredentials credentials,
                                                FormatType?format, ProductDomain domain)
        {
            var imutableMap = new Dictionary <string, string>(QueryParameters);

            if (null != signer && null != credentials)
            {
                var accessKeyId  = credentials.GetAccessKeyId();
                var accessSecret = credentials.GetAccessKeySecret();
                switch (credentials)
                {
                case BasicSessionCredentials sessionCredentials:
                {
                    var sessionToken = sessionCredentials.GetSessionToken();
                    if (null != sessionToken)
                    {
                        QueryParameters.Add("SecurityToken", sessionToken);
                    }

                    break;
                }

                case BearerTokenCredential credential:
                {
                    var bearerToken = credential.GetBearerToken();
                    if (null != bearerToken)
                    {
                        QueryParameters.Add("BearerToken", bearerToken);
                    }

                    break;
                }
                }

                imutableMap = Composer.RefreshSignParameters(QueryParameters, signer, accessKeyId, format);
                imutableMap.Add("RegionId", RegionId);

                var paramsToSign = new Dictionary <string, string>(imutableMap);
                if (BodyParameters != null && BodyParameters.Count > 0)
                {
                    var    formParams = new Dictionary <string, string>(this.BodyParameters);
                    string formStr    = ConcatQueryString(formParams);
                    byte[] formData   = System.Text.Encoding.UTF8.GetBytes(formStr);
                    SetContent(formData, "UTF-8", FormatType.FORM);
                    foreach (var formParam in formParams)
                    {
                        DictionaryUtil.Add(paramsToSign, formParam.Key, formParam.Value);
                    }
                }

                var strToSign = this.Composer.ComposeStringToSign(Method, null, signer, paramsToSign, null, null);
                var signature = signer.SignString(strToSign, accessSecret + "&");
                imutableMap.Add("Signature", signature);

                StringToSign = strToSign;
            }

            Url = ComposeUrl(domain.DomianName, imutableMap);
            return(this);
        }
        private HttpRequest SignRequest <T>(AcsRequest <T> request, Signer signer, AlibabaCloudCredentials credentials, FormatType?format, ProductDomain domain)
        {
            var map = new Dictionary <string, string>(request.QueryParameters);

            var imutableMap = new Dictionary <string, string>();

            imutableMap.Add("Product", request.Product);
            if (map.ContainsKey("Action"))
            {
                imutableMap.Add("Action", map["Action"]);
                map.Remove("Action");
            }
            if (map.ContainsKey("Version"))
            {
                imutableMap.Add("Version", map["Version"]);
                map.Remove("Version");
            }
            if (map.ContainsKey("Format"))
            {
                imutableMap.Add("Format", map["Format"]);
                map.Remove("Format");
            }
            map.Add("RegionId", request.RegionId);
            string queryJson = JsonConvert.SerializeObject(map);

            imutableMap.Add("Params", queryJson);
            imutableMap.Add("RegionId", request.RegionId);

            if (null != signer && null != credentials)
            {
                string signature    = string.Empty;
                var    accessKeyId  = credentials.GetAccessKeyId();
                var    accessSecret = credentials.GetAccessKeySecret();

                var sessionCredentials = credentials as BasicSessionCredentials;
                var sessionToken       = sessionCredentials == null ? null : sessionCredentials.GetSessionToken();
                if (sessionToken != null)
                {
                    DictionaryUtil.Add(request.QueryParameters, "SecurityToken", sessionToken);
                }

                var credential  = credentials as BearerTokenCredential;
                var bearerToken = credential == null ? null : credential.GetBearerToken();
                if (bearerToken != null)
                {
                    DictionaryUtil.Add(request.QueryParameters, "BearerToken", bearerToken);
                }

                RefreshSignParameters(imutableMap, signer, accessKeyId, format);

                var paramsToSign = new Dictionary <string, string>(imutableMap);
                if (request.BodyParameters != null && request.BodyParameters.Count > 0)
                {
                    var formParams = new Dictionary <string, string>(request.BodyParameters);
                    var formStr    = AcsRequest <T> .ConcatQueryString(formParams);

                    var formData = System.Text.Encoding.UTF8.GetBytes(formStr);
                    request.SetContent(formData, "UTF-8", FormatType.FORM);
                    foreach (var formParam in formParams)
                    {
                        DictionaryUtil.Add(paramsToSign, formParam.Key, formParam.Value);
                    }
                }

                var strToSign = request.Composer.ComposeStringToSign(request.Method, null, signer, paramsToSign, null, null);
                signature = signer.SignString(strToSign, accessSecret + "&");
                DictionaryUtil.Add(imutableMap, "Signature", signature);

                request.StringToSign = strToSign;
            }

            foreach (var keypair in queryParam)
            {
                imutableMap.Add(keypair.Key, keypair.Value);
            }

            request.Url = ComposeUrl(request, domain.DomainName, imutableMap);
            return(request);
        }
 public override String SignString(String stringToSign, AlibabaCloudCredentials credentials)
 {
     return(SignString(stringToSign, credentials.GetAccessKeySecret()));
 }