ドメイン全体の委任アクセスを使用して API メソッド gmail.users.settings.delegates.list を使用する、NodeJS ベースのクラウド関数を作成しようとしています。
サービス アカウントの JSON キーを使用しないソリューションを探しています。代わりにデフォルトの資格情報を使用したいと考えています。
この launch.json ファイルを使用して、クラウド関数 env をエミュレートするようにローカル env を構成します
{
"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"
}
]
}
環境変数をGCFに出力するGOOGLE_APPLICATION_CREDENTIALS
と、この変数はまったく存在しないようですが、GCF環境をより適切にシミュレートする方法がわかりません
auth オブジェクトについて話すと、次の 2 つの方法が見つかりました。
初め:
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 })
2番:
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 })
第4:
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 に不正なリクエストが送られます