当前位置: 首页 > 知识库问答 >
问题:

共享谷歌驱动器突然返回服务号404

子车心思
2023-03-14

我有一个谷歌云平台服务号,启用了域范围的委托和https://www.googleapis.com/auth/drive范围。

直到最近,使用此帐户的服务器连接到三个不同的驱动器、在它们下面创建文件夹或返回文件夹内容都没有任何问题。服务器从2020年初/中期开始使用该帐户,这些API调用已经正常工作了很长时间。

现在,当服务器试图在驱动器下创建文件夹或在驱动器下列出目录内容时,会收到404。驱动器和文件夹肯定存在——我可以在谷歌驱动器网页上访问它们。这让我相信这是一个权限问题,但我在搜索中没有找到任何东西。据我所知,我们的服务帐户或服务器没有任何变化。

这是在一个驱动器下创建文件夹的代码,该驱动器现在返回404,并告诉我该驱动器不存在(我使用的是google api python client。我已经向他们提出了一个问题,但我认为这不是库的问题):

file_metadata = {
    'name':  name,
    'mimeType': 'application/vnd.google-apps.folder',
    'parents': [drive_id]
}

file = service.files().create(body=file_metadata, fields='id', supportsAllDrives=True).execute()

下面是返回的错误:

{
  "domain": "global",
  "location": "fileId",
  "locationType": "parameter",
  "message": "File not found: <drive_id>",
  "reason": "notFound"
}

此外,这只是此服务器连接到的三个驱动器中的两个的问题。一个仍然正常工作,所以我不知道是什么改变了导致三个驱动器中的两个出现这个问题。我认为这是在过去几周才开始的,因为我的用户在过去几周才通知我,指标页面在12日之前没有显示任何问题(但我只能看到过去30天):

指标页面

谷歌在这方面的留档无助于解决这个问题:https://developers.google.com/drive/api/v3/handle-errors#resolve_a_404_error_file_not_found_fileid

有谁能帮我弄明白这一点,或者给我指出正确的方向吗?

如果有帮助,下面是我们在服务器上使用服务号的凭据:

{
  "type": "service_account",
  "project_id": "<project_id>",
  "private_key_id": "<private_key_id>",
  "private_key": "<private_key>",
  "client_email": "<service_account_client_email>",
  "client_id": "<service_account_client_id>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<url_encoded_service_account_email>"
}

共有1个答案

时向文
2023-03-14

很抱歉浪费大家的时间——问题似乎是一个不知道用户在做什么的用户从驱动器成员中删除了服务帐户。我不是开发人员,我没有谷歌驱动器API的经验,所以我不知道检查的服务帐户驱动器的成员。

对于其他可能有同样问题的人:

按照此答案查看服务帐户是否仍然是成员,并在需要时添加它。

您可以检查https://admin.google.com/ac/reporting/audit/drive并过滤事件名称:共享驱动器成员资格更改,以查看谁删除了服务号。

 类似资料:
  • 我试图创建一个共享驱动器(在谷歌驱动器),使用API v3(通过python客户端库google-api-python-Client)。下面的代码: 但出现了一个错误: GoogleapClient。错误。HttpError: 错误是直观的,但我的问题是关于我需要给API用户帐户的正确权限,因为: 这个用户不是个人帐户,但它是服务帐户,因为它在API中使用,应该为我的应用程序的每个客户创建一个共享

  • 我为我的帐户name@steelkiwi.com(谷歌应用程序)创建了服务帐户,我的应用程序运行良好。然后我为我的个人帐户name@gmail.com创建了服务帐户,为我的应用程序使用这个新的凭据,现在当我试图插入文件时,我得到错误500和下一个文本: HttpError 500请求https://www.googleapis.com/upload/drive/v2/files时?quotause

  • 进入带有服务号凭据的谷歌驱动器api,上传特定用户的文件j********@gmail.com. 我在谷歌开发者API控制台创建我的帐户服务凭据。我添加用户权限j****@gmail.com我授权我的应用j****@gmail.com 但有时候这种信息会失败 这是我的auth代码

  • 我已经建立了一个新的服务帐户,可以访问Google Drive API。我现在想与服务帐户用户共享我的一个驱动器。 现有建议建议建议您只需使用服务帐户电子邮件地址共享驱动器。不幸的是,这会产生以下错误: 我需要做些什么来让我的服务账户成为“谷歌账户”吗? 谢谢 卡尔

  • 我已经使用Google Drive的功能有一段时间了,但我遇到了一个相当有问题的问题。

  • 返回正确的标识符。当我使用服务帐户复制文件时,我可以全天在团队驱动器中复制。当我将它复制到用户的驱动器时,我得到的是“File not found:$UserRootid”。 我假设这是由于服务帐户无法访问用户的“我的驱动器”。我怎样才能让这个手术奏效?有人尝试过吗?