身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证

Posted

技术标签:

【中文标题】身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证【英文标题】:Authentication is not working for google cloud API authentication with NodeJS 【发布时间】:2021-10-14 07:16:02 【问题描述】:

我正在尝试使用 Google 服务帐户从 Google Drive 下载文件。为此,我创建了一个项目,创建了一个服务帐户和密钥。 现在,当我尝试使用 google auth api 时,它返回未定义。

请在下面找到代码。

const scope = ["https://www.googleapis.com/auth/drive"];
const authService = new google.auth.GoogleAuth(
  keyFile: "./service.json",                                                                                                                                                                                                                                            
  scopes: scope,
);

这会返回类似下面的内容,

GoogleAuth 
  checkIsGCE: undefined,
  jsonContent: null,
  cachedCredential: null,
  _cachedProjectId: null,
  keyFilename: './service.json',
  scopes: [ 'https://www.googleapis.com/auth/cloud-platform' ],
  clientOptions: undefined

虽然 service.json 位于同一个文件夹中并从工作区本身复制了凭据。

请告诉我。谢谢

【问题讨论】:

【参考方案1】:

请记住,您需要与服务帐户共享文件,以便它有权下载文件。

// service account key file from Google Cloud console.
const KEYFILEPATH = 'C:\\ServiceAccountCred.json';

// Request full drive access.
const SCOPES = ['https://www.googleapis.com/auth/drive'];

// Create a service account initialize with the service account key file and scope needed
const auth = new google.auth.GoogleAuth(
    keyFile: KEYFILEPATH,
    scopes: SCOPES
);

 const driveService = google.drive(version: 'v3', auth);

var fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
var dest = fs.createWriteStream('/tmp/photo.jpg');
driveService.files.get(
  fileId: fileId,
  alt: 'media'
)
    .on('end', function () 
      console.log('Done');
    )
    .on('error', function (err) 
      console.log('Error during download', err);
    )
    .pipe(dest);

要了解授权的工作原理,请查看File upload node.js

【讨论】:

@DalmTo 我已经创建了凭证文件并与服务帐户共享。仍然。这个身份验证部分没有运气。 @nick 确实设法解决了这个问题?

以上是关于身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

为互联网打开端口 5000 不适用于谷歌云计算引擎实例

护照身份验证不适用于使用快速路由器的特定路由

next() 中间件不适用于令牌身份验证

Ldap 身份验证不适用于 Spring Boot

中间件身份验证不适用于 Web Laravel 5.2

JWT 身份验证不适用于 Django 中的自定义控制器