Refresh oauth access token attached to this HTTP session.

        Raises:
            :exc:`.GCPAuthError`: if no token was found in the
                response.
            :exc:`.GCPHTTPError`: if any exception occurred,
                specifically a :exc:`.GCPHTTPResponseError`, if the
                exception is associated with a response status code.

async def refresh_token(self):
        """Refresh oauth access token attached to this HTTP session.

        Raises:
            :exc:`.GCPAuthError`: if no token was found in the
                response.
            :exc:`.GCPHTTPError`: if any exception occurred,
                specifically a :exc:`.GCPHTTPResponseError`, if the
                exception is associated with a response status code.
        """
        url, headers, body = self._setup_token_request()
        request_id = uuid.uuid4()
        logging.debug(_utils.REQ_LOG_FMT.format(
            request_id=request_id, method='POST', url=url, kwargs=None))
        async with self._session.post(url, headers=headers, data=body) as resp:
            log_kw = {
                'request_id': request_id,
                'method': 'POST',
                'url': resp.url,
                'status': resp.status,
                'reason': resp.reason,
            }
            logging.debug(_utils.RESP_LOG_FMT.format(**log_kw))

            # avoid leaky abstractions and wrap http errors with our own
            try:
                resp.raise_for_status()
            except aiohttp.ClientResponseError as e:
                msg = f'[{request_id}] Issue connecting to {resp.url}: {e}'
                logging.error(msg, exc_info=e)
                raise exceptions.GCPHTTPResponseError(msg, resp.status)

            response = await resp.json()
            try:
                self.token = response['access_token']
            except KeyError:
                msg = '[{request_id}] No access token in response.'
                logging.error(msg)
                raise exceptions.GCPAuthError(msg)

        self.expiry = _client._parse_expiry(response)