Хобрук: Ваш путь к мастерству в программировании

Google Cloud Platform: облачные функции и облачные задачи не работают с адресом электронной почты авторизованного сервисного аккаунта

Я создал адрес электронной почты для служебной учетной записи и добавил cloudfunctions.invoker роль в электронное письмо, чтобы убедиться, что только облачные задачи могут запускать облачные функции, и удалил AllUsers роль. Но когда облачные задачи пытались запустить облачную функцию, код состояния был UNAUTHENTICATED(16): HTTP status code 401, и выполнение не удалось.

Мой текущий код и консоль такие.

index.ts

export const addTasks = functions.https.onCall((data, context) => {
  if (!context.auth) {
    throw new functions.https.HttpsError('failed-precondition', 'You are not authenticated.')
  }

  const client = new tasks.CloudTasksClient()

  const projectId = functions.config().project.id
  const queue = 'queue'
  const location = functions.config().project.location
  const parent = client.queuePath(projectId, location, queue)
  const url = `https://${location}-${projectId}.cloudfunctions.net/executeSomething`
  const serviceAccountEmail = functions.config().project.email

  const task: tasks.protos.google.cloud.tasks.v2.ITask = {
    httpRequest: {
      httpMethod: 'POST',
      url: url,
      oidcToken: {
        serviceAccountEmail: serviceAccountEmail,
      },
    },
    scheduleTime: {
      seconds: ...,
    },
  }

  const request: tasks.protos.google.cloud.tasks.v2.ICreateTaskRequest = {
    parent: parent,
    task: task,
  }

  return client.createTask(request)
}

Консоль моей облачной функции

введите описание изображения здесь

Я добавил роль инициатора облачных функций в адрес электронной почты учетной записи службы.

Мои переменные среды проекта firebase

введите описание изображения здесь

Когда я добавил AllUsers роль в облачные функции, она работает должным образом, поэтому я уверен, что сделал ошибку при повторном разрешении доступа. Что мне не хватает?

Обновлять:

Моя консоль облачных задач

введите описание изображения здесь  введите описание изображения здесь


  • Возможно, это не так, но в приведенном ниже ответе serviceAccountEmail заключены в кавычки. Не могли бы вы попробовать использовать "service_account_email": service_account_email и проверить, решает ли он проблему? 23.11.2020
  • Вы узнали, что не работает? 08.12.2020
  • @Black_Bacardi Еще нет .. 09.12.2020

Ответы:


1

Ваш токен OIDC не соответствует спецификации

Просто укажите адрес электронной почты без имени атрибута, как в этом примере или используйте snake_case, как описано в спецификации

23.11.2020
  • Я попробовал с [email protected] и обновил свои переменные среды и снова развернул функции, но это все равно не удалось. (Я ввожу test, и автоматически добавляется случайное число) Я не думаю, что проблема связана с названием. Прикрепил несколько картинок. Пожалуйста, взгляните. 23.11.2020
  • 401 означает, что вы не предоставили заголовок аутентификации, поэтому я сосредоточился на правильном определении адреса электронной почты учетной записи службы. Я бы предпочел, чтобы 403 вы прошли аутентификацию, но не авторизованы, или токен не читается / не действителен. Твердо убежден, что вызов осуществляется без заголовка авторизации. Но я не знаю, почему он продолжает терпеть неудачу. 23.11.2020
  • Новые материалы

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..