Я бы не менял переменную среды для каждого запроса. Как вы упомянули, аутентификация специфична для данного запроса, в то время как переменные среды должны использоваться для хранения элементов конфигурации, которые являются общими для всех запросов, выполненных в «среде».
Обычный подход заключается в индивидуальном указании путей к учетным записям служб (клиент диалогового потока может быть инициализирован путем указания пути к файлу учетной записи службы):
const sessionClient = new dialogflow.SessionsClient({
keyFilename: '/path/to/google.json'
});
- код непосредственно из ответа https://stackoverflow.com/a/50546430. Также см. Google Документы SessionsClient .
Итак, когда приходит запрос, посмотрите на некоторые параметры запроса, чтобы определить, какую аутентификацию использовать, а затем инициализируйте клиент с путем к этому файлу аутентификации. Кроме того, само собой разумеется, но защищайте эти файлы как пароли (не передавайте их в публичное хранилище и т. Д.).
Если вы обнаружите, что управляете множеством секретов или вам необходимо часто изменять или обновлять их, вы можете обратиться к службе, которая будет обрабатывать это для вас, например, к Системе управления ключами GCP (https://cloud.google.com/kms/), которая может выполнять ротацию ключей). / управление проще в управлении. Сообщение в блоге GCP по управлению учетными записями служб .
Для небольшого проекта указание путей к файлам должно работать нормально.