in alibabacloud_oss_v2/signer/v4.py [0:0]
def _auth_header(self, signing_ctx: SigningContext) -> None:
request = signing_ctx.request
cred = signing_ctx.credentials
# Date
if signing_ctx.signing_time is None:
datetime_now = datetime.datetime.now(datetime.timezone.utc)
datetime_now = datetime_now + \
datetime.timedelta(seconds=(signing_ctx.clock_offset or 0))
else:
datetime_now = signing_ctx.signing_time.astimezone(
datetime.timezone.utc)
datetime_now_iso8601 = datetime_now.strftime('%Y%m%dT%H%M%SZ')
datetime_now_rfc2822 = format_datetime(datetime_now, True)
date_now_iso8601 = datetime_now_iso8601[:8]
request.headers.update({'x-oss-date': datetime_now_iso8601})
request.headers.update({'Date': datetime_now_rfc2822})
# Credentials information
if cred.security_token is not None:
request.headers.update(
{'x-oss-security-token': cred.security_token})
# Other Headers
request.headers.update({'x-oss-content-sha256': 'UNSIGNED-PAYLOAD'})
# Scope
region = signing_ctx.region or ''
product = signing_ctx.product or ''
scope = self._build_scope(
date=date_now_iso8601, region=region, product=product)
# additional headers
additional_headers = self._common_additional_headers(
request, signing_ctx.additional_headers)
# Canonical request
canonical_request = self._calc_canonical_request(
signing_ctx=signing_ctx, additional_headers=additional_headers)
# string to sign
string_to_sign = self._calc_string_to_sign(
datetime_now_iso8601, scope, canonical_request)
# print('\ncanonical_request:{}\n'.format(canonical_request))
# print('string_to_sign:{}\n'.format(string_to_sign))
# signature
signature = self._calc_signature(
access_key_secrect=cred.access_key_secret,
date=date_now_iso8601,
region=region,
product=product,
string_to_sign=string_to_sign)
# credential header
credential_header = f'OSS4-HMAC-SHA256 Credential={cred.access_key_id}/{scope}'
if len(additional_headers) > 0:
credential_header = f'{credential_header},AdditionalHeaders={";".join(additional_headers)}'
credential_header = f'{credential_header},Signature={signature}'
request.headers.update({'Authorization': credential_header})
signing_ctx.string_to_sign = string_to_sign
signing_ctx.signing_time = datetime_now