Google Drive API 客户端(Python):files().insert() 的权限不足

Posted

技术标签:

【中文标题】Google Drive API 客户端(Python):files().insert() 的权限不足【英文标题】:Google Drive API Client (Python): Insufficient Permission for files().insert() 【发布时间】:2015-11-25 08:43:21 【问题描述】:

我正在尝试让一个简单的 Python Google Drive 上传器正常工作。我在开发者控制台中创建了一个项目,启用了 Drive API 并添加了一个 OAuth 2.0 客户端 ID(应用程序类型 Other)。

我可以看到Google Drive的设置->管理应用中列出的应用程序,并且可以成功执行Google的Python Drive API客户端提供的许多操作。 files ().insert () 但是失败了:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&convert=false&useContentAsIndexableText=false&alt=json returned "Insufficient Permission">

这是为了插入到我已使每个人都可写的目录中,如下所示:

credentials = get_credentials ()
http = credentials.authorize (httplib2.Http ())
service = discovery.build ('drive', 'v2', http=http)

PARENT_ID="0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ"

perms = service.permissions().list(fileId=PARENT_ID).execute()

print ("PERMISSIONS:")
for perm in perms["items"]:
    for p in perm:
        print (p, perm[p])

print

parent = 
    "isRoot": False,
    "kind": "drive#parentReference",
    "id": PARENT_ID


service.files ().insert (
    body = "parents" : [parent],
    media_body='./test.txt',
    convert=False,
    useContentAsIndexableText=False
).execute ()

其中列出的权限为:

(u'withLink', True)
(u'kind', u'drive#permission')
(u'etag', u'"F-w0rsCIWtQP8RGyv_V1DlKfcRk/icwHkDdfUYuMzqZrUsVIyvu85K8"')
(u'role', u'writer')
(u'type', u'anyone')
(u'id', u'anyoneWithLink')
(u'selfLink', u'https://www.googleapis.com/drive/v2/files/0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ/permissions/anyoneWithLink')

谁能指出我缺少哪个权限?

【问题讨论】:

当您对用户进行身份验证时,您使用了什么范围? 错误的身份验证范围,我明白了。非常感谢。 【参考方案1】:

根据@DalmTo 的建议,问题是Auth 范围不正确:

 flow_from_clientsecrets()

【讨论】:

【参考方案2】:

Files: insert 需要至少具有以下范围之一的授权

https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/drive.filehttps://www.googleapis.com/auth/drive.appdatahttps://www.googleapis.com/auth/drive.apps.readonly

检查您正在使用哪个范围进行身份验证。

【讨论】:

我该怎么做?在 API 控制台中找不到它。【参考方案3】:

如果修改这些范围或权限,请尝试删除您之前保存的与凭据相关的文件或浏览器缓存(如果有)。

【讨论】:

以上是关于Google Drive API 客户端(Python):files().insert() 的权限不足的主要内容,如果未能解决你的问题,请参考以下文章

将 AppIdentityCredential 与 Google Drive API 一起使用

Google Drive API 客户端(Python):files().insert() 的权限不足

Google Drive API 客户端(Python):files().insert() 的权限不足

Google Drive API - 服务帐户存储限制 - 替代方案

通过 Drive API 自动执行 Google Sheet 操作(制作副本、Google App 脚本、触发器)

如何使用Google API在Team Drive中创建文件夹?