如何通过 Google Drive 和 App Engine SDK 使用 Oauth2 服务帐户

Posted

技术标签:

【中文标题】如何通过 Google Drive 和 App Engine SDK 使用 Oauth2 服务帐户【英文标题】:How to use Oauth2 service accounts with Google Drive and the App Engine SDK 【发布时间】:2013-02-03 05:03:19 【问题描述】:

使用 App Engine 和服务帐户访问 Google Drive 可以正常工作。为了使它工作,我还必须使用服务帐户名称共享我的云端硬盘文件:appid@appspot.gserviceaccount.com。

但是当我使用 GAE SDK 时,我收到了 401。我认为原因是我的股份的 SDK 的 service_account 名称。 SDK 的服务帐号名称为:test@localhost 根据:

app_identity.get_service_account_name()  # returns test@localhost

SDK 控制台中的错误信息:

发生错误:https://www.googleapis.com/drive/v2/files/0B9-mE........nM/children? alt=json&key=AI.......................N0 返回“无效凭据”>

这是访问 Google Drive 的代码:

def get(self):

    SCOPE = 'https://www.googleapis.com/auth/drive'
    credentials = AppAssertionCredentials(scope=SCOPE)
    logging.info(app_identity.get_service_account_name())
    http = credentials.authorize(httplib2.Http())
    if os.environ['SERVER_SOFTWARE'].startswith('Development') : 
        service = build('drive', 'v2', http=http, developerKey='...API key...')
    else :
        service = build('drive', 'v2', http=http, developerKey='...APY key...')
    # drive requests        

更新:

我的个人意见:这只适用于 GAE 而不适用于 SDK,因为我无法使用 SDK service_account 名称进行 Drive 共享。或者是否可以指定另一个服务帐户名称。

【问题讨论】:

【参考方案1】:

请查看Application-owned service accounts 的文档,还有一个video you can watch。

文档包含 Python 示例代码。

【讨论】:

你明白我的问题了吗?它适用于 GAE,但不适用于 GAE SDK。而且我不认为它可以工作,因为共享。 对不起,我想我没听懂。 GAE 和 GAE SDK 有什么区别?如果您指的是 GAE 服务帐户,那是不可能的,因为 Drive Apps 必须与客户端 ID 相关联。 SDK = 在我的 PC 上进行开发,使用 GAE 我是指部署的(在云中)应用程序。所以 GAE 工作正常,但是使用 SDK 在这种情况下它无法工作,因为 test@localhost 服务帐户名称用于访问驱动器。 developers.google.com/drive/service-accounts 现在给出 404。如果这个答案在此处包含所有必要的信息会更好。

以上是关于如何通过 Google Drive 和 App Engine SDK 使用 Oauth2 服务帐户的主要内容,如果未能解决你的问题,请参考以下文章

React Native App 中的 iCloud 和 Google Drive 集成

如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

如何使用 Google 服务帐户通过 Activity API 检索 Google Drive 活动?

如何通过 API 向 Google Drive 添加/创建/插入文件?

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)

在google drive使用google.colab云服务