Как пройти аутентификацию в облачной функции с помощью клиента node.js
У меня есть приложение node.js, работающее в GKE, которое должно иметь возможность выполнять межсерверный вызов облачной функции, для которой настроено разрешение, позволяющее вызывать только учетную запись службы, настроенную в модуле GKE. Таким образом, в основном, node.js имеет переменную окружения GOOGLE_APPLICATION_CREDENTIALS
указывая на файл ключа json, смонтированный на томе.
Также для локальной разработки было бы неплохо, если бы он просто использовал мои учетные данные, хранящиеся в конфигурации gcloud sdk.
Я выяснил, как выполнить аутентификацию с использованием учетных данных учетной записи службы. Вот код, предполагая, что GOOGLE_APPLICATION_CREDENTIALS
Переменная окружения содержит путь к json-файлу учетного ключа:
import { GoogleAuth } from 'google-auth-library'
const url = 'https://REGION-PROJECT.cloudfunctions.net/RECEIVING_FUNCTION'
const auth = new GoogleAuth({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
clientOptions: {
additionalClaims: {
target_audience: url
}
}
})
const client = await auth.getClient()
const res = await client.request({ url })
console.log(res.data)
Небольшое изменение заключается в следующем:
import { JWT } from 'google-auth-library'
const client = new JWT({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
additionalClaims: {
target_audience: url
}
})
Но я все еще не уверен, как это сделать с учетными данными учетной записи пользователя в локальной разработке. Наиболее близким решением является использование cURL
:
curl -i https://REGION-PROJECT.cloudfunctions.net/RECEIVING_FUNCTION \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
Так что есть способ, но как мне сделать это в JavaScript?