Как авторизовать веб-приложение, написанное на простом javascript, для взаимодействия с restful api модели прогнозирования google automl?

Кажется, повсюду валяется много документации о том, как использовать Google Cloud Platform и ее причудливую службу AutoML. Но я не смог найти ничего, что решало бы мою проблему попытки получить прогноз от обученной модели на AutoML через локальный веб-сайт. Код сайта находится по этой ссылке: https://pastebin.com/xsfkYf6C

Все, что я получаю взамен от загрузки изображения и нажатия кнопки «обработать» на этом сайте, это:

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

Я наверняка где-то допустил некоторые ошибки, но я совершенно не знаю, как бы это исправить, или, может быть, потому, что я слишком туп, чтобы понять это. Мои исследования ни к чему не привели. Эта статья может помочь прояснить ситуацию с AutoML Restful API: https://cloud.google.com/vision/automl/docs/reference/rest/v1beta1/projects.locations.models/predict

Оцените любые ваши предложения и исправления кода. Большое спасибо и хорошего дня!

Вы уже нашли решение для вызова API?

neobie 05.10.2018 07:42
0
1
362
2

Ответы 2

Вам нужно передать свой ключ api для вызова REST API следующим образом:

https://automl.googleapis.com/v1beta1/projects/a...1/locations/us-central1/models/ICN...1:predict?key=API_KEY

Чтобы создать ключ API, вам понадобится учетная запись Google Cloud, поскольку она бесплатна только до определенного момента, после чего с вас будет взиматься плата.

Поэтому вам следует защитить этот ключ и убедиться, что он не виден публично (поэтому не вставляйте исходный код html, серверная часть должна обрабатывать этот вызов).

Подробнее здесь

Я уже пытался создать ключ API и добавить URL-адрес для почтового запроса, но все равно получаю ту же ошибку 401.

neobie 05.10.2018 07:40

Ошибка может означать, что вы используете ключ API или предоставленный вами токен неверен / имеет неправильный формат. Я думаю, что создание токена с использованием Playground, ServerSide, Javascript и т. д. Не удастся из-за отсутствия областей OAuth2.0 для AutoML, возможно, потому, что он все еще находится в бета-версии.

Имея в виду, что токен, сгенерированный из gcloud, он работает, я могу предложить программно сгенерировать токен выдача себя за учетную запись службы в сгенерировать токен, этот пример содержит все части головоломки. Это означает, что ваш пользователь может сгенерировать токен учетной записи службы от имени вашей службы.

Что следует учитывать при выполнении кода:

  1. Включите API управления идентификацией и доступом (IAM).
  2. Обновите код в соответствии с вашей собственной конфигурацией, проектом и файлом json.
  3. Используйте общую область видимости: https://www.googleapis.com/auth/cloud-platform как jwt_scope.

ВАЖНО: код python использует urllib и httplib, что означает, что он может быть переведен на запросы POST с некоторыми дополнительными усилиями (для использования в вашем javascript).

Сообщите нам, работает ли это для вашего конкретного случая использования!

Другие вопросы по теме