Python 谷歌API服务帐户。即使具有域范围的委派访问权限,也只能看到服务帐户驱动器
我目前正在使用一个启用了域范围授权的Google服务帐户(我跟随了这个链接,还有这个链接),并且“范围已启用。我已经下载了服务帐户的json凭据,并将它们放在与python脚本相同的目录中。问题是当我在我的域中模拟另一个用户(比如User2)时,我试图列出User2驱动器中的文件。我只获取服务帐户驱动器中的文件 我有一段模拟User2的代码Python 谷歌API服务帐户。即使具有域范围的委派访问权限,也只能看到服务帐户驱动器,python,google-drive-api,google-admin-sdk,google-api-python-client,google-workspace,Python,Google Drive Api,Google Admin Sdk,Google Api Python Client,Google Workspace,我目前正在使用一个启用了域范围授权的Google服务帐户(我跟随了这个链接,还有这个链接),并且“范围已启用。我已经下载了服务帐户的json凭据,并将它们放在与python脚本相同的目录中。问题是当我在我的域中模拟另一个用户(比如User2)时,我试图列出User2驱动器中的文件。我只获取服务帐户驱动器中的文件 我有一段模拟User2的代码 def auth(): domain = 'domain' # impersonate this user user = 'test
def auth():
domain = 'domain'
# impersonate this user
user = 'testuser' # id only (ie. without @domain)
#scopes = ['https://www.googleapis.com/auth/drive',]
key_file = 'service_account.json'
subject = ''.join([user,'@',domain])
delegated_credentials = service_account.Credentials.from_service_account_file(key_file)
delegated_credentials.with_subject(subject)
drive_service = googleapiclient.discovery.build('drive', 'v2', credentials=delegated_credentials)
return drive_service
然后,稍后我将尝试获取用户mydrive中的文件列表
children = service.children().list(folderId='root', **param).execute()
for child in children.get('items', []):
item = service.files().get(fileId=child['id']).execute()
以上项目始终是服务帐户“我的驱动器”中的“入门PDF”
基本上,这样做的全部目的是通过编程将任何文件夹(及其内容)的所有权更改为同一个G-Suite中的另一个用户
另外,我不想像许多其他帖子所说的那样与我的服务帐户共享文件夹。不应该是这样,因为我是在冒充主人
如果这不是发布问题的正确方式,我深表歉意。这是我的第一篇帖子。回答:
身份验证流有两个问题:缺少作用域和错误分配变量
更多信息:
delegated\u credentials
变量时,委托凭据中缺少作用域凭证
对象时,必须指定您将在请求中使用的范围
然后,将作用域添加到凭据时,需要将其分配给一个变量,该变量可以传递给驱动器服务的构建
代码修复:
要修复第1点,您需要取消注释范围并更改此行:
delegated\u credentials=service\u account.credentials.from\u service\u account\u文件(key\u文件)
要包含范围,请执行以下操作:
scopes=['https://www.googleapis.com/auth/drive']
委托的\u凭据=服务\u帐户.credentials.from\u服务\u帐户\u文件(
密钥文件,作用域=作用域)
此外,在构建驱动器服务之前,您还需要将委派的\u凭据分配给自身。使用\u subject(subject)
:
delegated\u credentials=委托的\u凭证。带有\u主题(主题)
drive\u service=googleapiclient.discovery.build(
“驱动器”、“v2”凭据=委派的\u凭据)
我希望这对你有帮助
参考资料:
时,结果是服务帐户的凭据,而不是委托凭据。用_subject()调用,
就可以生成委托凭证,正如前面指出的,这是一个新对象。谢谢大家!!!!!我都快疯了。我投了赞成票。