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