JWT и токен доступа - это две разные вещи.JWT состоит из трех частей: заголовка, набора заявок и подписи.С другой стороны, токен доступа может быть получен только с Сервера авторизации.Пожалуйста, добавьте раздел этого документа Google.Я создал облачную функцию, передавая данные учетной записи службы для кодирования в JWT (с заголовком и полезной нагрузкой).
signed_jwt = jwt.encode(payload, key, headers=additional_headers, algorithm='RS256')
decoded_signed_jwt = signed_jwt.decode("utf-8")
Чтобы получить токен доступа, обратитесь к следующему фрагменту кода.
token_endpoint = 'https://www.googleapis.com/oauth2/v4/token'
token_req_data = {
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion': decoded_signed_jwt
}
token_post_data = urllib.parse.urlencode(token_req_data).encode("utf-8")
access_token_req = urllib.request.Request(token_endpoint, token_post_data)
access_token_req.add_header('Content-Type', 'application/x-www-form-urlencoded')
result = urllib.request.urlopen(access_token_req)
json_str = result.read()
Эта строка json должна включать токен доступа.Используйте этот токен доступа в заголовке запроса для требуемого API.Обновите свою полезную нагрузку для подписанного JWT, как показано ниже, в противном случае вы не сможете получить действительный JWT.
'scope': 'https://www.googleapis.com/auth/cloud-platform',
'aud': 'https://www.googleapis.com/oauth2/v4/token'
Надеюсь, это поможет, и я благодарен службе поддержки Google за часть этого ответа.