in sdk/src/signer/SignerV4.cc [280:331]
void SignerV4::sign(const std::shared_ptr<HttpRequest> &httpRequest, ParameterCollection ¶meters,
SignerParam &signerParam)const
{
if (!signerParam.Cred().SessionToken().empty()) {
httpRequest->addHeader("x-oss-security-token", signerParam.Cred().SessionToken());
}
auto requestTime = signerParam.RequestTime();
auto datetime = FormatUnixTime(requestTime, "%Y%m%dT%H%M%SZ");
auto date = FormatUnixTime(requestTime, "%Y%m%d");
httpRequest->addHeader(Http::DATE, ToGmtTime(requestTime));
httpRequest->addHeader("x-oss-date", datetime);
if (!httpRequest->hasHeader("x-oss-content-sha256")) {
httpRequest->addHeader("x-oss-content-sha256", "UNSIGNED-PAYLOAD");
}
auto additionalHeaders = getCommonAdditionalHeaders(httpRequest->Headers(), signerParam.AdditionalHeaders());
auto canonicalReuqest = buildCanonicalReuqest(httpRequest, parameters, signerParam, additionalHeaders);
auto scope = date + "/" + signerParam.Region() + "/" + signerParam.Product() + "/aliyun_v4_request";
auto stringToSign = buildStringToSign(datetime, scope, canonicalReuqest);
auto signature = buildSignature(signerParam.Cred().AccessKeySecret(), date, signerParam.Region(), signerParam.Product(), stringToSign);
std::stringstream authValue;
authValue
<< "OSS4-HMAC-SHA256"
<< " Credential="
<< signerParam.Cred().AccessKeyId() << "/"
<< scope;
if (!additionalHeaders.empty()) {
authValue
<< ",AdditionalHeaders="
<< toHeaderSetString(additionalHeaders);
}
authValue
<< ",Signature="
<< signature;
//std::cout << "canonicalReuqest:" << canonicalReuqest << std::endl;
//std::cout << "scope:" << scope << std::endl;
//std::cout << "stringToSign:" << stringToSign << std::endl;
//std::cout << "signature:" << signature << std::endl;
//std::cout << "AUTHORIZATION:" << authValue.str() << std::endl;
httpRequest->addHeader(Http::AUTHORIZATION, authValue.str());
OSS_LOG(LogLevel::LogDebug, TAG, "request(%p) CanonicalReuqest:%s", httpRequest.get(), canonicalReuqest.c_str());
OSS_LOG(LogLevel::LogDebug, TAG, "request(%p) StringToSign:%s", httpRequest.get(), stringToSign.c_str());
OSS_LOG(LogLevel::LogDebug, TAG, "request(%p) Authorization:%s", httpRequest.get(), authValue.str().c_str());
}