private RefreshResult GetNewSessionCredentials()

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.");
        }