GCP - делегирование облачных функций в домене с использованием учетных данных приложения по умолчанию (без -jwt)
Я пытаюсь создать облачную функцию на основе NodeJS, которая использует доступ к делегированию домена для использования метода API gmail.users.settings.delegates.list.
Я ищу решение, которое не использует JSON-ключ учетной записи службы, вместо этого я хочу использовать учетные данные по умолчанию.
Я настраиваю локальный env для эмуляции облачной функции env с помощью этого файла launch.json.
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch usersOnBehalfCheck",
"skipFiles": [
"<node_internals>/**"
],
"env": {
"GCP_PROJECT":"projectId",
"GOOGLE_APPLICATION_CREDENTIALS": "pathToJsonFile.json"
},
"program": "${workspaceFolder}/index.js"
}
]
}
Распечатка GOOGLE_APPLICATION_CREDENTIALS
Переменная env в GCF кажется, что эта переменная вообще не существует, но я не понимаю, как лучше имитировать GCF env
Говоря об объекте auth, я нашел два способа:
Первый:
const gmailDWDAuth = new GoogleAuth({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
Второй:
const gmailDWDAuth = await google.auth.getClient({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
inputData.userPrimaryEmail
содержать действующую учетную запись GSuite в той же организации, что и учетная запись службы.
оба способа работают нормально локально, но перестают работать, с Bad Request
ошибка, когда я опубликовал GCF в GCP .
может кто-нибудь помочь?
РЕДАКТИРОВАТЬ
через несколько часов я обнаружил, что этот пост говорит об этом
Я изменил свой код, следуя его инструкции
Третий:
const DWDAuth = await google.auth.getClient({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
DWDAuth.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuth: DWDAuth }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuth })
Четвертый:
const DWDAuth = new GoogleAuth({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
const DWDAuthClient = await DWDAuth.getClient();
DWDAuthClient.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuthClient: DWDAuthClient }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuthClient })
как и раньше, все это отлично работает локально, но я получаю неверный запрос в GCF