in sdk/Util/OssRequestSignerV4.cs [83:135]
public override void PreSign(ServiceRequest request, SigningContext signingContext)
{
if (signingContext == null ||
signingContext.Expiration == null ||
IsAnonymousCredentials(signingContext.Credentials))
return;
// Date
var signTime = DateTime.UtcNow;
if (signingContext.SignTime.Ticks != 0)
{
signTime = signingContext.SignTime;
}
var datetime = FormatDateTime(signTime);
var date = FormatDate(signTime);
var expires = ((long)signingContext.Expiration.Subtract(signTime).TotalSeconds).ToString(CultureInfo.InvariantCulture);
// Scope
var scope = string.Format("{0}/{1}/{2}/aliyun_v4_request", date, Region, Product);
var additionalHeaders = GetAdditionalHeaders(request.Headers, AdditionalHeaders);
// Credentials information
var credentials = signingContext.Credentials;
if (credentials.UseToken)
{
request.Parameters.Add("x-oss-security-token", credentials.SecurityToken);
}
request.Parameters.Add("x-oss-signature-version", "OSS4-HMAC-SHA256");
request.Parameters.Add("x-oss-date", datetime);
request.Parameters.Add("x-oss-expires", expires);
request.Parameters.Add("x-oss-credential", string.Format("{0}/{1}", credentials.AccessKeyId, scope));
if (additionalHeaders != null && additionalHeaders.Count > 0)
{
request.Parameters.Add("x-oss-additional-headers", CanonicalizeHeaderNames(additionalHeaders));
}
// CanonicalRequest
var canonicalRequest = CanonicalizeRequest(request, additionalHeaders);
// StringToSign
var stringToSign = CalcStringToSign(datetime, scope, canonicalRequest);
// Signature
var signature = CalcSignature(credentials.AccessKeySecret, date, Region, Product, stringToSign);
// Credential
request.Parameters.Add("x-oss-signature", signature);
//Console.WriteLine("canonicalRequest:{0}\n", canonicalRequest);
//Console.WriteLine("stringToSign:{0}\n", stringToSign);
//Console.WriteLine("signature:{0}\n", signature);
}