google-app-engine - 从 Google Cloud 函数访问 Google Drive API

标签 google-app-engine google-cloud-platform jwt google-cloud-functions

我已经看到有不同的 NodeJS 模块使用 Google API。
访问与 Google Cloud 功能的服务帐号共享的文件的最佳做法是什么?

最佳答案

我主要使用 Python 进行开发,但它存在与您提到的 Node 类似的问题:大量库和太多不同的代码示例。另一个问题是访问 G Suite API(如 Drive)与 GCP API 不同。 (披露:我在谷歌工作,正在努力改善这种差异。)
服务帐户身份是访问 Drive API 的最佳方式。来自 GCF。但是,您可以选择 Cloud Function 的 default service account身份(对于 App Engine 应用程序相同),或者作为此处建议的另一个答案,user-managed service account反而。如果您计划拥有多个身份来执行不同的操作、需要不同类型的访问权限等,后者是一个好主意,否则使用默认值会更容易,因为除了创建之外您实际上不需要做任何其他事情该帐户的私钥对。
一旦您决定了服务帐户的类型,最好使用 Google APIs Client Library for Node.js与云端硬盘、G Suite 和其他 非 GCP 谷歌 API。关注 Drive API Node.js quickstart tutorial学习如何“工作”。由于 Drive 文件通常属于用户帐户而不是服务帐户,因此快速入门功能中的身份验证示例 OAuth client ID (user account) auth而不是 service account auth提示用户(驱动器所有者)授予应用程序访问其数据的权限,因此不要只是剪切-n-粘贴!
(如果您不使用 Cloud Functions,您可能正在使用 Web 应用程序或命令行工具。在这种情况下,如果选择用户帐户身份验证而不是服务帐户身份验证,最终用户 [驱动器文件所有者] 必须明确授予通过熟悉的OAuth consent dialog 允许您的代码访问他们的文件。作为开发人员,您需要事先setup that OAuth consent screen in the Cloud Console。注意:该屏幕截图取自我的G Suite APIs intro tutorial [Python])。
从示例中复制必要的样板文件并将用户 acct auth 替换为服务帐户身份验证。见service account section of the Node.js client library有关如何执行此操作的文档。不要忘记为您决定从 Service accounts page 使用的任何服务帐户创建一个私钥对。以及它应该拥有的任何角色/权限。它会在创建 key 文件后提示您下载 key 文件,然后使用您的函数上传该文件(除非您按照另一个答案中的建议使用 Secret Manager)。通过使用客户端库,您可以避免将内容粘贴在请求 header 中(也如另一个答案中所建议的那样)。 然而 ,如果这是 CI/CD 周期的一部分,在任何情况下都不应将该 key 文件 checkin Git;如果您的私钥被泄露/公开... DOOM 将降临到您头上。

关于google-app-engine - 从 Google Cloud 函数访问 Google Drive API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456630/

相关文章:

ios - 如何使用适用于 iOS 的 Google Sign-in 从 iOS 客户端对 Google Cloud Endpoints 进行经过身份验证的调用?

docker - 如何将 Docker Hub 镜像拉到 Google Cloud Run?

jwt - Auth0.com,它到底是如何运作的?

asp.net-core - 在 token 生成方法中使用 EncryptingCredentials 时出现 JWT 加密错误

javascript - 如何在不使用库的情况下在 javascript 中解码 jwt token ?

java - 代表该网站(而不是用户)从 Google App Engine 网站在 YouTube 上发布视频

python - Python 中的调试变量

python - 使用 Gridfs 将 Base64 字符串图像存储到 MongoDB

node.js - 使用 App Engine Node JS 标准的过滤器进行云数据存储投影查询

google-app-engine - 何时选择 App Engine 而不是 Cloud Functions?