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

通过云函数访问Google Sheets Python API的身份验证问题

羊刚捷
2023-03-14

我试图访问谷歌表使用云函数和表API在python,但得到一个403权限错误。我创建了一个服务号,导出了密钥(包含在我正在上传的云函数zip中),并为该服务号提供了访问工作表所需的API范围(我尝试了https://www.googleapis.com/auth/spreadsheets和https://www.googleapis.com/auth/drive)。下面是代码:

import httplib2
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

def main(request):
  scope = ['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive']

  credentials = ServiceAccountCredentials.from_json_keyfile_name('client_secrets.json', scope)

  service = build('sheets', 'v4', http=credentials.authorize(httplib2.Http()))

  spreadsheet_id = 'id-of-the-google-sheet'

  range = 'Sheet1!A:D'

  response = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range).execute()

  cols = response.get('values', [])[0]
  return cols[0]

requirements.txt:

google-api-python-client
oauth2client
google-auth-httplib2
google-auth

如果我显式地与服务号共享Google工作表,则身份验证有效,并且我可以访问工作表数据。问题是,为什么这不能通过应用适当的API范围作为谷歌帐户管理员来工作?

共有1个答案

萧韬
2023-03-14

Google Drive权限位于范围之上。请求的身份验证需要范围,但是驱动器权限(以及扩展表)决定了谁有权访问哪个文件。如果调用帐户(在这种情况下是服务帐户)不能访问有问题的工作表,您将获得403。

在管理控制台中设置作用域与权限没有直接关联。

还有一点需要注意的是,如果您在默认情况下将文档共享给谷歌办公套件帐户中的每个人,您可以使用域宽委托(1)并使用服务帐户在谷歌办公套件域中模拟用户(如超级管理员)。您不需要将每个文档与服务帐户本身共享。

(1) 这篇文章是针对AdminSDK的,但这篇文章包含了最好的示例。您对那里的凭证对象感兴趣。您还可以使用一个属性创建对象。json IIRC。

 类似资料:
  • 通过使用以下curl命令,我能够访问令牌并获得以下响应curl用户名:password@machinename:11002/appName/oauth/token-d grant\u type=password-d username=loginFormUserID-d password=loginFormUserPassword 响应:{“实体\ id”:9,“实体\类型”:“刷新\标记”:“ey

  • 我是Apache Shiro的初学者。我一直在跟踪文档和许多其他教程,博客等,但我就是无法使身份验证工作。当我尝试使用有效的用户名和密码登录时,总是会引发。我正在使用DynamoDB作为存储用户凭据的自定义领域,但我真的不认为这有什么关系。显然,我存储和/或执行凭据匹配的方式是不正确的。以下是我的设置:

  • 本文向大家介绍C#验证身份证的函数,包括了C#验证身份证的函数的使用技巧和注意事项,需要的朋友参考一下 这段C#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证 更为复杂些的验证方法: 方法三: 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与

  • 我正在开发一个Web应用程序 然而,我在尝试允许用户通过注册链接注册时遇到了一个问题。如果用户未经身份验证,则无法访问注册表的链接(“showRegistrationForm”) 有人能洞察为什么会发生这种情况吗?我在下面包含了我的安全配置中的代码片段