1

Node.js を使用して Firebase 関数からGoogle Site Verification APIを使用しようとしています。

Githubのgoogle-api-nodejs-clientリポジトリで入手できるREADMEでは、OAuth2 クライアント、JWT クライアント、またはコンピューティング クライアントを手動で作成する代わりに、デフォルトのアプリケーション メソッドを使用することを推奨しています。

ローカル (エミュレートされた関数環境) および Firebase 関数でリモートで実行しようとした次の例を作成しました。

const google = require('googleapis');

google.auth.getApplicationDefault(function (err, authClient, projectId) {
    if (err) {
        console.log('Authentication failed because of ', err);
        return;
    }

    if (authClient.createScopedRequired && authClient.createScopedRequired()) {
        authClient = authClient.createScoped([
            'https://www.googleapis.com/auth/siteverification'
        ]);
    }

    const siteVerification = google.siteVerification({
        version: 'v1',
        auth: authClient
    });

    siteVerification.webResource.get({
        id: 'test.com'
    }, {}, function (err, data) {
        if (err) {
            console.log('siteVerification get error:', err);
        } else {
            console.log('siteVerification result:', data);
        }
    });
});

どちらの場合も、実行時に次のエラーが発生します。

siteVerification get error: { Error: A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified. Insufficient Permission
    at Request._callback (/user_code/node_modules/googleapis/node_modules/google-auth-library/lib/transporters.js:85:15)
    at Request.self.callback (/user_code/node_modules/googleapis/node_modules/request/request.js:188:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/user_code/node_modules/googleapis/node_modules/request/request.js:1171:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (/user_code/node_modules/googleapis/node_modules/request/request.js:1091:12)
    at IncomingMessage.g (events.js:292:16)
    at emitNone (events.js:91:20)
  code: 403,
  errors: 
   [ { domain: 'global',
       reason: 'insufficientPermissions',
       message: 'Insufficient Permission' } ] }

サイト検証 API は、Firebase に関連付けられた Cloud プロジェクトに対して有効になっていることに注意してください。

更新

プロジェクト オーナーの役割を持つサービス アカウントを作成し、JWT メソッドで認証すると、次の権限エラーが発生します。

info: siteVerification get error: { Error: You are not an owner of this site.
    at Request._callback
    ...
    at IncomingMessage.g (events.js:292:16)
    at emitNone (events.js:91:20)
  code: 403,
  errors: 
   [ { domain: 'global',
       reason: 'forbidden',
       message: 'You are not an owner of this site.' } ] }

このエラーは、API エクスプローラーを使用して同じ ID で呼び出しを行い、これが詳細を返すため、所有していることがわかっているサイトの ID を取得するためのものです。

一部のアクセス許可を Google クラウド コンソールで構成する必要があるのか​​、それとも認証方法を変更する必要があるのか​​わかりません。手動ユーザー認証を使用した OAuth 2.0 クライアントのみが許可されているような気がします...

ヘルプは大歓迎です。

4

1 に答える 1