Как избежать «401 несанкционированного» при вызове вызываемой Firebase HTTP-функции в организации GCP? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть проект Firebase под управлением GCP. У меня есть NodeJS 10 вызываемых функций, которые прекрасно работают с локальным эмулятором Firebase и на тестовой странице функций GCP, но при попытке вызвать их в производство с использованием httpsCallable в веб-приложении я получаю 401 Unauthorized - ваш клиент не имеет разрешения на запрошенный URL

Моя тестовая функция практически ничего не дает - она ​​просто возвращает жестко закодированную строку. После попыток вызова в журналах ничего не появляется.

Попытка вызова функции выполняется после прохождения проверки подлинности Firebase в веб-приложении, и в процессе разработки я вижу, что пользователь действительно передается параметру context.

Я использую Firebase Tools 8.0.2 для развертывания.

В деталях функции консоли GCP я вижу "Параметры входа - Разрешить все трафик c", и, как я писал выше, он успешно запускается из теста там есть вкладка.

Я попытался сделать функцию publi c, но не могу установить разрешения в консоли или gcloud. Когда я пытаюсь запустить следующую команду с gcloud:

gcloud functions add-iam-policy-binding my-function-name \
 --member="allUsers" \
 --role="roles/cloudfunctions.invoker"

, я получаю:

ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/my-project-name/locations/us-central1/functions/my-function-name' (or resource may not exist).]

, даже если моя учетная запись выполняет следующие роли: владелец проекта, администратор облачных функций, администратор безопасности , Администратор политики IAP, Администратор организации

Любое руководство будет оценено.

1 Ответ

2 голосов
/ 11 апреля 2020

В соответствии с инструкциями Джона, оказалось, что для gcloud установлена ​​неправильная активная учетная запись, поэтому я установил для нее правильную учетную запись с необходимыми разрешениями, используя gcloud config set account my-email@my-domain.com, а затем я смог сделать функцию общедоступной, используя * 1002. *

gcloud functions add-iam-policy-binding my-function-name \
 --member="allUsers" \
 --role="roles/cloudfunctions.invoker"
...