Я пытался следовать этому руководству authenticating_from_a_service_account (в этом руководстве нет примера Node.js и не относится к функциям firebase) и другим, чтобы позволить функции firebase получить доступ к другому приложению /API на GCE за IaP, который требует авторизованного JWT.Я пробовал несколько методов и подходов, которые все не дали результатов и не работают.
Подход 1 - с использованием googleapis auth lib с 'auth.getClient ()' - Мне удалось заставить это работать локально при обслуживании функции, локально этот метод возвращает объект JWT, который я могу предоставить 'AdditionalClaims' (со свойством 'target_audience'), а затем использовать 'auth.authorize ()', который предоставляет JWT (это работает локально).но когда я развернул ее для запуска базы, функция получит объект Compute вместо JWT, который не имеет учетных данных по умолчанию и метод authorize ().
Подход 2 - используя Firebase Admin SDK & JWT из auth lib - поэтому я попытался использовать JWT lib напрямую (из «google-auth-library»), для которой нужны адрес электронной почты и ключ.Опять же, локально это работало, я использовал admin.credential.applicationDefault (), чтобы получить clientEmail и privateKey, и создать новый JWT, а затем метод authorize () для получения JWT.при развертывании функции admin.credential.applicationDefault () не предоставляет учетные данные и не работает.
Подход 3 - с использованием пользовательского токена SDK администратора - Я также пытался использовать Firebase Admin SDK для создания пользовательского токена ('admin.auth (). CreateCustomToken') и предоставления также «AdditionalClaims», но с этим JWT я не могу получить доступ к IaP, вероятно, потому что администраторSDK имеет постоянную область действия «google.identity.identitytoolkit.v1.IdentityToolkit», и мне нужно создать токен с «target_audience».
Я предполагаю, что если я разверну свой файл credentials.json с функциейэто сработает, но, похоже, это не лучшая практика, и я не знаю, обеспечено ли это.Очевидно, что функция имеет доступ к этим учетным данным, я просто не могу найти способ ее получить.
Может кто-нибудь предложить решение вышеуказанных проблем или предложить другой подход, который будет работать?
Спасибо.