def METHOD_NAME(self):
    aud = 'https://oauth2.googleapis.com/token'
    scopes = ['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/spanner.data']
    grant_type = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
    liftetime = 3600
    iat = int(time.time())
    exp = iat + liftetime
    payload = {
        'iat': iat, 
        'exp': exp, 
        'iss': self.google_creds['client_email'], 
        'aud': aud, 
        'scope': ' '.join(scopes)
        }
    headers = {
        'typ': 'JWT',
        'alg': 'RS256',
        'kid': self.google_creds['private_key_id']
        }
    assertion = jwt.encode(
        payload,
        self.google_creds['private_key'],
        headers=headers,
        algorithm='RS256'
        )
    req = requests.post(
        url=aud,
        data={
            'assertion': [assertion],
            'grant_type': [grant_type]
            }
       )
    response = req.json()
    self.id_token = response['access_token']
    self.headers = {'Authorization': 'Bearer {}'.format(self.id_token)}