0

ドメイン全体の委任アクセスを使用して 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 に不正なリクエストが送られます

4

0 に答える 0