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

0 ответов