Makes an OAuth2 access token request with crafted JWT and signature.

        The core of this module. Based on arguments it creates proper JWT
        for you and signs it with supplied private key.
        Regardless of present valid token, it always clears
        ``issued_at`` property, which in turn results in requesting
        fresh OAuth2 access token.

        Returns:
            requests.Response

        Raises:
            google_oauth.exceptions.AuthenticationError:
                If there was any non-200 HTTP-code from Google.
            requests.RequestException:
                Something went wrong when doing HTTP request.

def make_access_request(self):
        """Makes an OAuth2 access token request with crafted JWT and signature.

        The core of this module. Based on arguments it creates proper JWT
        for you and signs it with supplied private key.
        Regardless of present valid token, it always clears
        ``issued_at`` property, which in turn results in requesting
        fresh OAuth2 access token.

        Returns:
            requests.Response

        Raises:
            google_oauth.exceptions.AuthenticationError:
                If there was any non-200 HTTP-code from Google.
            requests.RequestException:
                Something went wrong when doing HTTP request.
        """
        del self.issued_at

        assertion = b'.'.join((self.header(), self.claims(), self.signature()))
        post_data = {
            'grant_type': GRANT_TYPE,
            'assertion': assertion,
        }

        resp = requests.post(AUDIENCE, post_data)

        if resp.status_code != 200:
            raise AuthenticationError(resp)

        return resp