谷歌 API 服务帐户。即使使用域范围委派访问也只能看到服务帐户驱动器

2024-02-16

我目前使用的 Google 服务帐户已启用域范围委派(我点击了此链接https://developers.google.com/identity/protocols/oauth2/service-account https://developers.google.com/identity/protocols/oauth2/service-account,以及这个链接https://developers.google.com/admin-sdk/reports/v1/guides/delegation https://developers.google.com/admin-sdk/reports/v1/guides/delegation),并且有“https://www.googleapis.com/auth/drive范围已启用。我已经下载了服务帐户的 json 凭证,并将它们放在与我的 python 脚本相同的目录中。问题是当我模拟域中的另一个用户(例如 User2)时,我尝试列出 User2 驱动器中的文件。我只获取我的服务帐户驱动器中的文件。

我有一段模拟 User2 的代码片段。

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 中的另一个用户。

另外,我不想像许多其他帖子所说的那样与我的服务帐户共享文件夹。不应该是这样,因为我冒充了主人。


Answer:

您的身份验证流程存在两个问题:缺少范围和错误分配的变量。

更多信息:

  1. 当您分配时,您的委托凭证中缺少范围delegated_credentials多变的。
  2. 添加主题时,您不会分配新委派的凭据。

正如你在准备进行授权的 API 调用 https://developers.google.com/identity/protocols/oauth2/service-account#authorizingrequests文档,当定义你的credentials object you must指定您将在请求中使用的范围。

然后,在将范围添加到凭据时,您需要将其分配给一个可以传递到 Drive 服务的构建的变量。

代码修复:

要修复第 1 点,您需要取消注释范围并更改此行:

delegated_credentials = service_account.Credentials.from_service_account_file(key_file)

包括范围:

scopes = ['https://www.googleapis.com/auth/drive']
delegated_credentials = service_account.Credentials.from_service_account_file(
        key_file, scopes=scopes)

此外,您还需要分配delegated_credentials.with_subject(subject)在构建驱动服务之前对其自身进行:

delegated_credentials = delegated_credentials.with_subject(subject)
drive_service = googleapiclient.discovery.build(
        'drive', 'v2', credentials=delegated_credentials)

参考:

  • 准备进行授权的 API 调用 https://developers.google.com/identity/protocols/oauth2/service-account#authorizingrequests
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷歌 API 服务帐户。即使使用域范围委派访问也只能看到服务帐户驱动器 的相关文章

  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • 调试VS 2005提示“操作不支持”

    我一直在调试 VS 2005 并将 启动外部程序 设置为 C Program Files Microsoft Visual Studio 10 0 Common7 IDE devenv exe 但按 F5 后出现此错误 尝试运行项目时出错
  • Android Jasper 报告

    Jasper Reporting 可以集成到 Android 应用程序中吗 我正在尝试从 jrxml 文件生成 PDF CSV 文本和 XLS 报告 但是 我没有看到 Android SDK 支持 net sf jasperreports
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这
  • 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

    我注意到一些成熟的Python库已经为大多数架构 Win32 Win amd64 MacOS 和Python版本提供了预编译版本 针对不同环境交叉编译扩展的标准方法是什么 葡萄酒 虚拟机 众包 我们使用虚拟机和Hudson http hud
  • 在 VS2008 的 XAML 编辑器中禁用 Intellisense?

    有没有办法在 Visual Studio 2008 的 XAML 编辑器中禁用 Intellisense 打字时通常会消耗很大的性能 有时我会等待十秒或更长时间 直到列表自动弹出 似乎在 选项 gt 文本编辑器 gt XAML 中 Inte
  • 查询联系人 - 有时返回空游标

    我正在尝试查询联系人的显示名称 Override public void onActivityResult int requestCode int resultCode Intent data switch requestCode case
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • ggplot2 的 fortify 函数出错

    我在 ggplot2 中使用 fortify 方法时收到此错误 Error in function classes fdef mtable unable to find an inherited method for function pr
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class
  • 在 for 循环比较中使用集合大小

    Java 中 Collections 的 size 方法是否有编译器优化 考虑以下代码 for int i 0 i
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法
  • CLion - 命令行程序参数

    当我分配给 运行 调试配置 程序参数 之类的 aaa bbb 然后打印它时 任何人都可以告诉我 JetBrains CLion 有什么问题吗 printf s n argv 1 我刚刚得到 aaa 而它必须是 aaa bbb 因为它们用双引
  • 无法将 /root/.rnd 加载到 RNG 中

    我想使用 Windows Open SSL 生成服务器证书 当我运行此命令行时 出现此错误 我应该怎么办 Command openssl req new x509 days 3650 key ca key out ca crt Error
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 首先在实体框架代码中使用导航属性

    Context 代码优先 实体框架 4 3 1 用户 主题 1对多关系 User with public virtual ICollection
  • 使用 Selenium IDE 输入 IFrame

    我想使用 Selenium IDE 在 IFrame 中输入一些内容 但我不知道该怎么做 多谢 您必须选择 iframe 然后输入 selenium selectFrame css iframe widget
  • RxJS 为 Angular2 提供了哪些功能?

    有一些Angular2 项目中的 RxJS RxJS 在 Angular2 中的用途是什么 angular2 使用 RxJS 的列表 HTTP 例如其get https github com angular angular blob mas
  • 在任务窗格中使用时,WPF 组合框不会保持打开状态

    我在 WPF Interop 和 Excel Addin 方面遇到了一个奇怪的错误 我正在使用 Net 3 5 SP1 我正在使用 Add in Express 为 Excel 2003 创建自定义任务窗格 在该任务窗格中 我使用 Elem
  • 对于 g++ 4.1.2,runtime_error 未在此范围内声明

    相同的代码在 gcc 4 5 2 上运行良好 但是当尝试在 gcc 4 1 2 上编译它时 出现错误 runtime error was not declared in this scope 我有 include
  • spring-form.tld ...它在哪里?

    我找不到这个标签库 我需要它 因为http www springframework org tags form http www springframework org tags form不起作用 从 Spring 3 0 版本开始 两者s
  • VBA 中的 IF/OR 错误

    Range BS2 BS NewLastRow Formula IF OR BR2 FLAG BO2 gt 0 FLAG NOFLAG 我在 VBA 中使用这个公式 但它不起作用 语法看起来不错 太多 Range BS2 BS NewLas
  • 尝试向 Laravel 发送 android volley post 请求

    我使用 laravel 5 1 进行数据库连接并将 post 请求从 android 发送到 laravel 但异常显示 服务器错误 这是我的 Android 代码 package com example ankit postrequest
  • Selenium Python 改变 IP

    我正在使用 Selenium for Python 编写一个网络爬虫 抓取工具每小时会多次访问同一网站 因此我希望找到一种方法 每隔几次搜索就更改我的 IP 最好的策略是什么 我使用的是 Firefox 是否有任何我可以切换的预先编写的代码
  • Android Studio 中的 JavaCV 配置

    我知道有很多类似的问题 但由于 JavaCV 等库的开发 其中很多似乎已经过时了 我使用的代码来自在 Android 中使用图像和音频创建视频 https stackoverflow com questions 23775173 video
  • Chrome 说我的内容脚本不是 UTF-8

    收到错误Could not load file worker js for content script It isn t UTF 8 encoded gt file I chrome worker js chrome worker js
  • Springframework“需要重定向才能获得用户批准”

    我的 Spring Web 应用程序有问题 我想使用 web 应用程序访问 google 日历 api 因此我必须向 api 验证自己的身份并授予对日历的访问权限 但实际的问题是我收到了错误org springframework secur
  • 嵌套枚举的替代方案

    我正在尝试创建几个enums因此 这给出了语法Dropdown Category Subcategory 然而 我一直在读到这不是一个好主意 我的选择主要是因为我想不出任何其他方法来选择不同的enum值取决于类别的选择 然后子类别的选择取决
  • 对于给定的整数 a,找到总和为 a 的所有唯一的正整数组合

    不是家庭作业问题 我正在回答这些问题here http www careercup com question id 5653595164770304我遇到了这个问题 有人已经回答了 我已经尝试了很多方法来理解所使用的递归 但我无法理解它 有
  • Laravel Dusk:未知错误:调用函数结果缺少“值”

    我在使用 Laravel Dusk type 和 value 方法时遇到问题 我收到以下错误 php artisan dusk group activation Warning TTY mode is not supported on Wi
  • 相同的AVX指令集代码Intel Core与AMD Ryzen性能差距巨大

    我想使用AVX指令集来加速从8通道图像到8通道图像的卷积运算 我使用 3x3 卷积核 我的代码如下 const float kptr kernels const float bptr biases m256 out0 mm256 loadu
  • 在Python中下载之前获取文件的大小

    我正在从网络服务器下载整个目录 它工作正常 但我不知道如何在下载之前获取文件大小以比较它是否在服务器上更新 这可以像我从 FTP 服务器下载文件一样完成吗 import urllib import re url http www someu
  • tomcat webapps目录绝对路径?

    我将 tomcat 提取放在一个地方 而我的 webapps 目录可能在其他地方 那么如何获取我的Web应用程序的绝对路径呢 我的文件处理程序位于 webapps 内 我想找到我的 webapps 或应用程序目录的绝对路径 从 c 或 ho
  • GitHub 页面上的侧边栏

    我在 GitHub Pages 上托管了一个简单的网站 它是一个公共存储库 仅使用具有默认设置等的标准默认模板 它是直接从根目录发布的 本质上 按照官方 Github Pages 教程 一切都处于默认状态 我只想为我的目录显示一个侧边栏 注
  • 谷歌 API 服务帐户。即使使用域范围委派访问也只能看到服务帐户驱动器

    我目前使用的 Google 服务帐户已启用域范围委派 我点击了此链接https developers google com identity protocols oauth2 service account https developers