Как получить токен аутентификации для Google Cloud Translation API в браузере (расширение chrome)

Я пытаюсь создать расширение для Chrome, использующее Google Cloud Translation API. Я выполнил кучу инструкций на разных страницах документации по Google Translate и разработке расширений Chrome, но Я до сих пор не могу понять, как на самом деле использовать API из браузера.

Больше всего я понял, что следую части краткого руководства, в которой вы создаете учетной записи службы, получите файл ключа учетной записи службы (загруженный как файл .json), установите и инициализируйте SDK Google, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS на путь к файлу ключа JSON учетной записи службы, а затем сделайте запрос curl, используя gcloud auth application-default print-access-token, чтобы получить токен доступа, который будет введен как часть заголовка запроса: «Авторизация: предъявитель (здесь токен)». Таким образом успешно получен перевод.

Но в среде расширения вы не можете запускать такие команды, как gcloud, поэтому это не сработает. Мне удалось вручную получить токен доступа с помощью команды gcloud, а затем вставить его в свой код javascript как часть заголовка запроса (например, xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ya29.c.Elr6BRuTfOtherRandomLetters');). Но срок действия этого токена доступа истекает через 60 минут, так что это не работает стабильно.

Я также пробовал использовать метод identity.getAuthToken (после обновления в manifest.json как сказано в документации), но это не сработало. Использование идентификатора клиента моей служебной учетной записи в качестве client_id под oauth2 в manifest.json привело к ошибке «Недействительный идентификатор клиента» от identity.getAuthToken. С другой стороны, создание идентификатора клиента OAuth2 из консоли Google и использование myoauth2clientid.apps.googleusercontent.com в качестве client_id в oauth2 и ["https://www.googleapis.com/auth/cloud-translation", "https://www.googleapis.com/auth/cloud-platform"] в качестве scopes в oauth2 привело к ошибке «OAuth2 не предоставлен или отозван» из identity.getAuthToken.

Создание ключа API со страницы консоли Google и использование его непосредственно в качестве параметра key моего запроса на перевод даже не сработало: я получил сообщение «В запросе отсутствует действующий ключ API». ошибка.

Я действительно в растерянности. Любая помощь была бы потрясающей.




Ответы (2)


Я (первый плакат) также прошел те же шаги, что и вы, но с помощью ответа @ magicnumber я придумал решение для перевода текста (с любого языка на английский) в моем расширении Chrome с использованием ключа API вместо учетной записи службы ключевой файл.

Сначала создайте функцию перевода (здесь я использовал шаблон Async -> Await):

 async function translate(strSourceText,strApiKey)
  {
    var url = `https://translation.googleapis.com/language/translate/v2?key=${strApiKey}`
    let response = await fetch(url, {
      method: 'POST',
      headers : { 
        'Content-Type': 'application/json',
       },
       body: JSON.stringify({
         target: "en",
         format: "text",
         q: strSourceText
       }),
    }); 
    let data = await response.json()
    return data;
  }

Затем вызовите асинхронную функцию, которая вернет обещание. Например:

query="כלב" //Hebrew word for dog ????

translate(query,  "YOURVALIDAPIKEYGOESHERE")
  .then(response => console.log(response.data))
  .catch(reason => console.log(reason.message));

Ответ API перевода Google должен выглядеть так:

{
  "data": {
    "translations": [
      {
        "translatedText": "Dog",
        "detectedSourceLanguage": "iw"
      }
    ]
  }
}

Наконец, чтобы избежать нарушения Политики безопасности контента, в моем случае мне пришлось добавить домен API перевода к ключу разрешений в файле manifest.json моего расширения:

"permissions": ["https://translation.googleapis.com/language/translate/v2/*"],
person L4ivi    schedule 24.01.2020
comment
Ваше решение не работает для меня с моим ключом API, который я создал в Cloud Console для вновь созданного проекта. Я включил платный аккаунт с пробным периодом, но он все равно не работает. В чем моя ошибка? - person Alex Popov; 23.01.2021

Я проделал те же шаги, что и вы, и также не могу полагаться на gcloud для аутентификации.

Ошибка "В запросе отсутствует действующий ключ API" заставила меня использовать описанный здесь синтаксис запроса https://codelabs.developers.google.com/codelabs/cloud-translation-intro/index.html#5

В моем случае я использовал:

curl -s -X POST -H "Content-Type: application/json" \
    --data "{
  'q': 'The Great Pyramid of Giza (also known as the Pyramid of Khufu or the
        Pyramid of Cheops) is the oldest and largest of the three pyramids in
        the Giza pyramid complex.',
  'source': 'en',
  'target': 'es',
  'format': 'text'
}" "https://translation.googleapis.com/language/translate/v2?key=YOURVALIDAPIKEYHERE"
person oflisback    schedule 18.10.2018