in src/AlibabaCloud.OSS.V2/Signer/SignerV4.cs [104:164]
private static void AuthHeader(SigningContext signingContext)
{
var request = signingContext.Request;
var credentials = signingContext.Credentials;
var region = signingContext.Region ?? "";
var product = signingContext.Product ?? "";
// Date
var signTime = signingContext.SignTime ?? DateTime.UtcNow;
var datetime = FormatDateTime(signTime);
var date = FormatDate(signTime);
var datetimeGmt = FormatRfc822Date(signTime);
// Scope
var scope = $"{date}/{region}/{product}/aliyun_v4_request";
// Credentials information
if (credentials!.SecurityToken.IsNotEmpty())
request!.Headers["x-oss-security-token"] = credentials.SecurityToken;
// Other Headers
request!.Headers["x-oss-content-sha256"] = UnsignedPayload;
request.Headers["x-oss-date"] = datetime;
request.Headers["Date"] = datetimeGmt;
// lower key & Sorted Headers
// the headers is OrdinalIgnoreCase
var headers = request.Headers;
var additionalHeaders = GetAdditionalHeaders(headers, signingContext.AdditionalHeaders);
additionalHeaders.Sort();
// CanonicalRequest
var canonicalRequest = CanonicalizeRequest(
request,
ResourcePath(signingContext.Bucket, signingContext.Key),
headers,
additionalHeaders
);
// StringToSign
var stringToSign = CalcStringToSign(datetime, scope, canonicalRequest);
// Signature
var signature = CalcSignature(credentials.AccessKeySecret, date, region, product, stringToSign);
// Credential
var sb = new StringBuilder();
sb.AppendFormat("OSS4-HMAC-SHA256 Credential={0}/{1}", credentials.AccessKeyId, scope);
if (additionalHeaders.Count > 0) sb.AppendFormat(",AdditionalHeaders={0}", additionalHeaders.JoinToString(";"));
sb.AppendFormat(",Signature={0}", signature);
request.Headers["Authorization"] = sb.ToString();
//Console.WriteLine("canonicalRequest:{0}\n", canonicalRequest);
//Console.WriteLine("stringToSign:{0}\n", stringToSign);
//Console.WriteLine("signature:{0}\n", signature);
//update
signingContext.StringToSign = stringToSign;
}