def _auth_header()

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