使用 Oauth2 作为服务帐户的 Google 管理 API(教育版)- 403 错误

2024-04-20

我在使用 Google 新的 Admin SDK 时遇到困难。特别是使用 Oauth2 的 Directory API。 我想我已经快到了,但我在尝试使用 Directory API 检索用户详细信息时遇到了困难(我正在使用 Google Education Edition 域)。

基本上我想做的是编写一个 python 脚本,根据用户的注册状态(由我们的 AD 管理)来配置或取消配置用户。我有一个使用 Oauth1 执行此操作的脚本,但想将其更新为使用 Oauth2。

这是基于我找到的一些示例的代码片段。

f = file('test_key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
     '[email protected] /cdn-cgi/l/email-protection',
     key,
     scope= 'https://www.googleapis.com/auth/admin.directory.user')
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='admin', version='directory_v1', http=http)

lists = service.users().get(userKey='j[email protected] /cdn-cgi/l/email-protection').execute(http=http)
pprint.pprint(lists)

这段代码似乎连接正确,但当我尝试执行查询时,出现 403 错误。

错误:https://www.googleapis.com/admin/directory/v1/users/[电子邮件受保护] /cdn-cgi/l/email-protection?alt=json 返回“未授权访问此资源/api”>

我的第一个想法是因为我还没有在管理员控制台上打开这个API(谷歌API控制台 https://code.google.com/apis/console/b/1/?pli=1#project:606346240424%3aservices) 但我有。 (实际上,我打开了 Admin SDK,而不是 Directory API,因为没有要打开的 Directory API,并且看到它是 Admin SDK 的一部分,它可以工作吗?)。

我是否还缺少其他步骤或者我在某个地方犯了一个愚蠢的错误?


Bruce,

你已经很接近了。

几件物品:

  • 如果您使用的是 App Engine,需要将 p12 密钥转换为 pem 并剥离标头 https://stackoverflow.com/questions/17993604/signedjwtassertioncredentials-on-appengine-doesnt-recognize-pem-key
  • 需要包含您使用以下命令模拟的具有超级用户凭据的用户(有权执行这些操作的用户)(而不是正在更改的用户)sub=范围

完整的代码看起来有点像这样:

    # domain configuration settings
    import domainconfig

    f = file(domainconfig.KEY_FILE, "rb") # b reads file in binary mode; not strictly necessary, but safer to avoid strange Windows EOL characters: https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode
    key = f.read()
    f.close()

    credentials = SignedJwtAssertionCredentials(

        domainconfig.SERVICE_ACCOUNT_EMAIL,
        key,
        scope = domainconfig.SCOPE, 
        sub=domainconfig.SUB_ACCOUNT_EMAIL # 'sub' supercedes the deprecated 'prn'

    )

    http = httplib2.Http()
    http = credentials.authorize(http)

    directoryservice = build("admin", "directory_v1", http=http)

    users = directoryservice.users()
    response = users.get(userKey='[email protected] /cdn-cgi/l/email-protection').execute() 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Oauth2 作为服务帐户的 Google 管理 API(教育版)- 403 错误 的相关文章

随机推荐

  • 对于有多个孩子的单亲,正确使用 fork() 和 pipeline() 。我该如何正确地做到这一点?

    So my 上一篇文章 https stackoverflow com questions 26321100 concept any good c example of fork pipe where one parent creates
  • KVO vs NSNotification vs 协议/委托?

    我知道何时使用哪个 但确切的用法我仍然不清楚 有人可以举例解释吗 如果您只想与一个对象对话 请使用委托 例如 tableView 有一个委托 只有一个对象应该负责处理它 如果您想告诉每个人发生了什么事 请使用通知 例如 在内存不足的情况下
  • 如何在 C++ 中打印带前缀 + 的正数

    有没有办法在 C 中打印整数及其符号 即默认情况下 如果数字为负数 我们会得到一个 印有标志 同理我们可以得到 在正数之前 int x 1 cout lt lt x lt
  • 使用 workbox-webpack-plugin 时,预缓存资源使用什么工作箱策略?

    我正在尝试了解工作箱和服务人员 使用workbox webpack plugin和GenerateSW模式时 用于预缓存资源的workbox策略是什么 IE 因为我似乎没有为预缓存资产设置路由 策略 以便服务工作线程更新这些资产的缓存 那么
  • PHP 本地化 - gettext 还是数组?

    设置多语言网站现在我需要决定为网站上的静态文本使用哪个选项 让我解释一下我的网站设置 然后您是否可以帮助我决定使用哪种解决方案 该站点是一个CMS系统 允许多个域指向同一目录并根据域名提供内容 因此所有域共享相同的代码 在网站上 我创建了称
  • iOS Safari:清除输入类型日期

    我制作了一个 NET mvc 应用程序 其中有一个字段 在 iPhone 在 Safari 中 上 一旦我单击此字段 就会出现一个本机 iOs 日期选择器 它有效 我可以选择一个日期 确认它 使用 完成 按钮 并提交表格 然后我再次访问此页
  • 克隆任意对象的函数

    我正在寻找一种方法来克隆在编译时 或运行时 我认为 未知的对象 问题的确切措辞是 编写一个可以克隆任意对象的函数 例如 将未知对象传递给函数 返回对象的深层副本 我猜我需要使用反射来读取函数和变量 然后了解如何创建一个新对象并将这些值分配给
  • 如何将三级词典转换为所需的格式?

    我有一个像这样的三级字典 data 2016 11 28 area1 am 0 007 pm 0 008 area2 am 0 0 pm 0 0 area3 am 0 01 pm 0 001 2016 11 29 area1 am 0 00
  • 以数据为中心的应用程序模型和面向对象的应用程序模型有什么区别?

    什么是以数据为中心的应用程序 与面向对象的应用程序模型有什么区别 这两个概念有些正交 以数据为中心的应用程序 http en wikipedia org wiki Database centric architecture数据库起着关键作用
  • docker-compose 无法启动

    我之前按照本演练成功创建了一系列 docker 容器 这些容器允许我使用 MySQLI PHP 和 phpmyadmin https gist github com jcavat 2ed51c6371b9b488d6a940ba104918
  • 使用指针作为函数参数时的段前缀

    我有一个汇编 c 问题 我刚刚读到了有关段前缀的内容 例如 ds varX 等 前缀对于逻辑地址的计算很重要 我也读到 默认值是 ds 一旦您使用 ebp 寄存器来计算地址 就会使用 ss 对于代码 cs 是默认值 这一切都是有道理的 现在
  • 如何将字符串中的表达式传递给 dplyr 0.7.2 中的动词

    我正在尝试实施我在网上找到的建议 但我的目标还差一半 这是一个可重现的示例 library tidyverse library dplyr library rlang data mtcars filter expr am 1 mutate
  • 有没有办法在 Google Directory API users.list 查询中使用“或”运算符?

    我想使用以下命令为 Google 域用户构建搜索查询用户列表 谷歌目录API 我尝试根据docs https developers google com admin sdk directory v1 guides search users
  • C 程序将一棵二叉搜索树复制到另一棵

    所以 在这里我想出了二叉搜索树程序 其中我创建了 2 个二叉树 tmp 和 tmp2 我试图将整个 tmp2 复制到 tmp 该节点作为用户的输入 但我遇到了一些分段错误 而且我也不太确定逻辑是否正确 这是整个程序 请让我知道 t cpy
  • 列表框无法显示子类变量

    我正在开发一个项目 其中用户输入动物值 姓名 年龄 性别等 并且用户输入的值显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自Mamma
  • 如何将隐私政策添加到我的应用程序中,而不仅仅是在商品详情中

    我收到来自 Google Play 团队的以下电子邮件 您好 Google Play 开发者 我们的记录显示您的应用 XXXX 带有软件包 名称 com XXX XXX 目前违反了我们的用户数据政策 关于个人和敏感信息 政策问题 Googl
  • 在 CoordinatorLayout 中使用时页脚滚动出屏幕

    我有 HomeActivity 其中包含片段 底部有自定义导航视图 如下所示 通过单击个人资料图片 它会将该片段替换为 UserProfileView 片段 userProfileView 片段在 coordinatorLayout 内有折
  • Ruby 单引号与双引号

    有某种红宝石吗to s将变量更改为单引号字符串而不是双引号的方法 说我有 date Time now date to s 我希望输出为 2012 08 01 22 00 15 我该怎么做呢 或者有没有一种方法可以将 字符串转换为 字符串 T
  • 继承自 jQuery UI 对话框并调用重写方法

    下面的简单代码描述了我的问题 至少我希望如此 widget ui mydialog ui dialog create function How to call create method of dialog 我试着打电话 ui dialog
  • 使用 Oauth2 作为服务帐户的 Google 管理 API(教育版)- 403 错误

    我在使用 Google 新的 Admin SDK 时遇到困难 特别是使用 Oauth2 的 Directory API 我想我已经快到了 但我在尝试使用 Directory API 检索用户详细信息时遇到了困难 我正在使用 Google E