У анонимного абонента нет storage.objects.get - PullRequest
1 голос
/ 25 мая 2019

В Google App Engine (GAE), написанном на Python.

Я пытаюсь создать http-сообщение для API-интерфейса облако-речь-текст и использую источник аудио URI (Google Bucket Object Bucket Objects).

Я использую следующие заголовки;

Authorization: BASIC encoded_base64(username:password)

Но я по-прежнему получаю сообщение об ошибке ниже:

{ "ошибка": { «код»: 403, "message": "Анонимный абонент не имеет доступа к storage.objects.get к bucket_of_secrets / four_score_seven_years.flac.", "status": "PERMISSION_DENIED" } }

Итак, у меня есть пара вопросов;

  1. Работает ли BASIC Authorization Header в Google HTTP API?
  2. Что username:password мне следует использовать? Это моя учетная запись GCP и пароль? т.е. handsome_dude@gmail.com:deluded_fool

Где handsome_dude@gmail.com - имя пользователя, а deluded_fool - пароль.

Я пытался установить объекты корзины как общедоступные для чтения, и, конечно, вызов http работает ... но я бы предпочел не устанавливать общедоступные объекты для своих групповых сообщений.

Вот пример запроса Curl:

curl -X POST 

https://speech.googleapis.com/v1/speech:longrunningrecognize?key=<secret_api_key> -d @sample.json -H "Content-Type: application/json, Authorization:  Basic base64encodedusername:password" 

Вот фрагмент кода в моем коде Python, использующий urlfetch:

url_post = urlfetch.fetch(url=speech_to_text_url_post, payload=json.dumps(data_to_post), method=urlfetch.POST, headers={"Content-Type" : "application/json", "Authorization" : "Basic "+encoded_user_password})

1 Ответ

2 голосов
/ 25 мая 2019

1. Работает ли BASIC-заголовок авторизации в Google HTTP API?

Нет, он не работает в API Google.Вам необходимо подключить OAuth2.0 accessToken к заголовку авторизации в качестве токена на предъявителя, например Authorization: Bearer ${yourAccessToken}.

У меня есть 2 рекомендации по разработке некоторых приложений, работающих на gae.

  1. Использование ClientLibrary для вызова API Google.
  2. Вы можете использовать AppEngineDefaultCredential для вызова API Google.Не забудьте установить права доступа к вашему AppEngineDefaultServiceAccount (${projectId}@appspot.gserviceaccount.com) перед тем, как отправить запрос.Вы можете настроить эти разрешения на странице IAM в облачной консоли .

Также я рекомендую вам прочитать эту страницу о Как аутентифицировать ваш вызов API .

...