GCP - делегирование домена в облачной функции с использованием учетных данных приложения по умолчанию (no -jwt) - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь создать облачную функцию, основанную на NodeJS, которая использует доступ к делегированию по всему домену для использования метода API gmail.users.settings.delegates.list.

Я ищу решение который не использует ключ учетной записи службы JSON, вместо этого я хочу использовать учетные данные по умолчанию.

Я настраиваю свой локальный env для эмуляции облачной функции env с помощью этого запуска. json file

{
    "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 кажется, что эта переменная вообще не существует, но я не понимаю, как лучше имитировать env GCF

Говоря об объекте 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.

Может кто-нибудь помочь?


РЕДАКТИРОВАТЬ

через несколько часов я нашел этот пост говорить s об этом

Я изменил свой код, следуя его инструкции

Третий:


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

...