in aliyun-net-credentials/Provider/RsaKeyPairCredentialProvider.cs [57:106]
private RefreshResult<CredentialModel> GetNewSessionCredentials(IConnClient client)
{
HttpRequest httpRequest = new HttpRequest();
httpRequest.SetCommonUrlParameters();
httpRequest.AddUrlParameter("Action", "GenerateSessionAccessKey");
httpRequest.AddUrlParameter("Format", "JSON");
httpRequest.AddUrlParameter("Version", "2015-04-01");
httpRequest.AddUrlParameter("DurationSeconds", durationSeconds.ToString());
httpRequest.AddUrlParameter("AccessKeyId", PublicKeyId);
httpRequest.AddUrlParameter("RegionId", regionId);
string strToSign = ParameterHelper.ComposeStringToSign(MethodType.GET, httpRequest.UrlParameters);
string signature = ParameterHelper.SignString(strToSign, PrivateKey + "&");
httpRequest.AddUrlParameter("Signature", signature);
httpRequest.Method = MethodType.GET;
httpRequest.ConnectTimeout = connectTimeout;
httpRequest.ReadTimeout = readTimeout;
httpRequest.Url = ParameterHelper.ComposeUrl("sts.aliyuncs.com", httpRequest.UrlParameters, "https");
HttpResponse httpResponse = client.DoAction(httpRequest);
if (httpResponse != null && httpResponse.Status != 200)
{
throw new CredentialException("Failed to get session credentials.HttpCode=" + httpResponse.Status);
}
Debug.Assert(httpResponse != null, "httpResponse != null");
Dictionary<string, object> contentObj = JsonConvert.DeserializeObject<Dictionary<string, object>>(httpResponse.GetHttpContentString());
string sessionAccessKeyId;
string sessionAccessKeySecret;
string expirationStr;
if (contentObj.ContainsKey("SessionAccessKey"))
{
string sessionAccessKeyJson = JsonConvert.SerializeObject(DictionaryUtil.Get(contentObj, "SessionAccessKey"));
Dictionary<string, string> sessionAccessKey =
JsonConvert.DeserializeObject<Dictionary<string, string>>(sessionAccessKeyJson);
sessionAccessKeyId = DictionaryUtil.Get(sessionAccessKey, "SessionAccessKeyId");
sessionAccessKeySecret = DictionaryUtil.Get(sessionAccessKey, "SessionAccessKeySecret");
expirationStr = DictionaryUtil.Get(sessionAccessKey, "Expiration").Replace('T', ' ').Replace('Z', ' ');
var dt = Convert.ToDateTime(expirationStr);
long expiration = dt.GetTimeMillis();
CredentialModel credentialModel = new CredentialModel
{
AccessKeyId = sessionAccessKeyId,
AccessKeySecret = sessionAccessKeySecret,
Expiration = expiration,
Type = AuthConstant.RsaKeyPair,
ProviderName = GetProviderName()
};
return new RefreshResult<CredentialModel>(credentialModel, GetStaleTime(expiration));
}
throw new CredentialException("Invalid json got from service.");
}