【发布时间】:2018-09-10 13:46:23
【问题描述】:
最近 Google Drive APIs 尤其是 Export 函数有什么变化,这将导致它在 3 月 27 日之后使用 API 密钥访问时失败-2018 年?
我有一个 Windows 服务,它为教育团体创建和发送每日课程电子邮件。每封电子邮件的源内容都以 Google Doc 的形式存储在 Google Drive 中,以便教师可以轻松更新课程内容。
这在过去一年中一直运行良好,但在 2018 年 3 月 27 日左右突然停止运行。从那时起,我可以检索文件详细信息;
_googleDriveHtmlContent.LoadFile(
fileId
);
但不是内容。当我 Export 将文件作为 HTML 格式时,我立即从 ProgressChanged 处理程序中获得 DownloadStatus.Failed;
var request = _driveService.Files.Export(
fileId,
"text/html"
);
我使用 API 密钥来确保安全,而不是 OAuth,因为它是一种无 UI 的服务。为此,我需要将文件夹标记为可公开访问 - 具体来说,我使用的是“所有人都可以访问,带有链接”。这一直很好。
我已通过 NuGet 更新到最新的 API v3 库,行为没有任何变化。
使用 Google 的 API Explorer,我看到了类似的行为。
我可以使用带有get 端点的API Explorer 成功检索我的文件。
https://developers.google.com/drive/v3/reference/files/get
- fileId
1AIuGhzXsNuhhi0PMA1pblh0l5CCDaa1nPj8t_dasi_c - 身份验证:API 密钥(使用“演示 API 密钥”)
但是使用export 端点,我得到一个内部错误(500)-
https://developers.google.com/drive/v3/reference/files/export
- fileId
1AIuGhzXsNuhhi0PMA1pblh0l5CCDaa1nPj8t_dasi_c - mimeType:
text/html - 身份验证:API 密钥(使用“演示 API 密钥”)
将 API Explorer 中的身份验证更改为 OAuth 2.0,并批准访问,然后返回成功的 200 结果以及文件 HTML。但是我无法做到这一点,因为我通过无 UI 服务访问 API。
【问题讨论】:
-
为什么您认为使用 API 密钥比使用不需要公开文件的服务帐户更安全?
-
这里没有考虑安全性——最初的决定是基于简单性和可用的 API 代码示例。我认为当时不存在服务帐户,至少我没有遇到任何提及它们。根据代码示例,似乎需要无人值守系统才能使用 API 密钥身份验证。很高兴看到今天的情况并非如此。
-
自 2012 年以来,我一直在处理这个问题,因为 Google 发现 API 一直存在服务器帐户。
标签: google-api google-drive-api google-oauth google-docs-api google-api-explorer