通过 OAuth 对 Google API 进行身份验证调用时遇到问题

2023-12-11

当我尝试使用服务器到服务器身份验证调用 Google Directory API 时,收到错误消息“未授权访问此资源/api”。

我做了什么:

  1. 在 Google Developers Console 中创建了一个应用程序。
  2. 下载私钥并查找服务帐户名称。
  3. 在 API 下激活 Admin SDK。
  4. 下载 google-api-php-client。
  5. 编写了以下代码:
$serviceAccountName = '[email protected]';
$scopes = 'https://www.googleapis.com/auth/admin.directory.group';
$privateKeyFile = dirname(__FILE__).'/../certs/googleapi-privatekey.p12';

$client = new Google_Client();
$client->setApplicationName('API Project');
$client->setScopes($scopes);
$cred = new Google_Auth_AssertionCredentials($serviceAccountName, $scopes, file_get_contents($privateKeyFile));
$client->setAssertionCredentials($cred);
$client->getAuth()->refreshTokenWithAssertion();

$req = new Google_Http_Request("https://www.googleapis.com/admin/directory/v1/groups/[email protected]/members?maxResults=1000");

$val = $client->getAuth()->authenticatedRequest($req);

var_dump($client->getAuth()->getAccessToken());
var_dump($val->getResponseBody());
  1. 执行该小脚本会生成一个有效的访问令牌,有效期为一小时,并显示以下错误消息:

{ "error": { "errors": [ { "domain": "global", "reason": "forbidden", "message": "无权访问此资源/api" } ], "code": 403 , "message": "未授权访问此资源/api" } }

当我尝试使用 PHP 脚本中的访问密钥在 Google OAuth Playground 上执行相同的请求时,出现相同的错误。我是否必须在开发人员控制台中的某个位置激活对该服务帐户的组数据的访问权限?


除了授予服务帐户客户端 ID 访问 Google Apps 控制台中给定范围的权限之外,您还需要告诉服务帐户在您的 Google Apps 域中模拟超级管理员用户:

$auth->sub = $adminEmail;

由于某种原因,Admin SDK 文档不包含 PHP 示例,但有示例代码实例化服务帐户在 Google 云端硬盘文档中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 OAuth 对 Google API 进行身份验证调用时遇到问题 的相关文章

  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • 显示表中的记录

    我的第一个 PHP 项目遇到了一些麻烦 我试图从 MySQL 数据库 有 3 条记录 获取数据并将其显示在表格中 问题是它似乎只显示记录 2 和 3 它跳过了第 1 条记录 请参阅我的代码并在下面显示 if mysqli connect e
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • zip 文件的校验和

    我目前正在开发一个工具 它上传一组文件 然后使用 md5 校验和将文件与上一批上传的文件进行比较 并告诉您哪些文件已更改 对于常规文件 这工作正常 但某些上传的文件是 zip 存档 即使其中的文件相同 它们几乎总是会发生变化 有没有一种方法
  • 负载平衡集群中的 PHP 会话 - 如何?

    好的 我得到了这个完全罕见的负载平衡 PHP 网站的独特场景 令人遗憾的是 它过去没有进行负载平衡 现在我们开始遇到问题 目前唯一的问题是 PHP 会话 当然 一开始没有人想到这个问题 因此 PHP 会话配置保留为默认值 因此 两台服务器都
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el

随机推荐

  • 将组的最大值分配给该组中的所有行

    我想将一个组的最大值分配给该组内的所有行 我怎么做 我有一个数据框 其中包含组的名称以及属于该组的最大学分数 course credits lt aggregate bsc academic Credits by list bsc acad
  • Android 4.3:如何连接多个蓝牙低功耗设备

    我的问题是 Android 4 3 客户端 可以与多个 BLE 设备 服务器 建立活动连接吗 如果是这样 我怎样才能实现它 到目前为止我做了什么 我尝试评估使用 BLE 和 Android 4 3 BLE API 可以实现的吞吐量 此外 我
  • 防止在 Windows 窗体中打开组合框控件的下拉区域

    我在 Windows 窗体中有一个自定义组合框控件 我想实现一个功能 其中根据某些条件不应显示下拉区域 即我需要防止组合框根据某些条件打开 我找到了一个可以实现此目的的链接 但它完全阻止了下拉区域的显示 我也无法根据自己的方便调整该方法 链
  • 通过忽略div标签javascript的内部元素来选择文本

  • pyodbc和ms access 2010连接错误

    如何使用 pyodbc 访问我的 Microsoft Access 2010 数据库 accdb 之前 我使用了 mdb 数据库 它在连接字符串为 ODBC CONN STR DRIVER Microsoft Access Driver m
  • 预引导加载屏幕

    我正在寻找一个预引导加载屏幕 类似于这个例子但对于 Angular 2 来说 我可以建议一种简单的 CSS 方法 首先添加 loadingdiv 到主 HTML 页面中 它应该遵循主应用程序组件元素 例如
  • JavaScript 拖放

    我正在寻找有人解释如何在 javascript 中拖放 我想要一条水平线 其中包含一些可自定义的图像 我看过这些的在线教程 但发现它们很难使用 我建议您研究一下 Javascript 框架之一 我们用原型与剧本 您可以在 Scriptacu
  • 如何在android中加载BufferedImage?

    我要加载BufferedImage在我的应用程序中 为此我正在使用ImageIO但我越来越java lang NoClassDefFoundError BufferedImage tgtImg loadImage ImageD2 jpg p
  • Google Apps 脚本仅在一次迭代后就停止了

    我在谷歌应用程序脚本中有一个小函数 必须在 for 循环中执行一些操作 即我有 3 行 其中包含一些值 对于每一行 我必须更新一张表 但不幸的是 我不明白为什么 但在仅仅一个之后循环程序停止了 并且没有return声明 这是代码 funct
  • 在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符

    我想设置自定义buttonStyle明暗模式按钮的修饰符 如何根据浅色或深色模式更改buttonStyle Modifier 我想为浅色和深色模式的按钮设置自定义修饰符 这是我的按钮代码 Button action print button
  • 从 R 中的数据框创建词云

    我制作了一个示例数据框 我尝试从 项目 栏制作一个词云 Hours lt c 2 3 4 2 1 1 3 Project lt c a b b a c c c Period lt c 2014 11 22 2014 11 23 2014 1
  • Android ListActivity 基于对象状态的行颜色

    我有一个 ListActivity 显示列表中的一堆对象 我想根据 MonitorObject 中两个布尔值的状态更改行的背景和文本颜色 我需要扩展 ArrayAdapter 吗 如果是这样 代码示例将不胜感激 因为我已经尝试了几天但没有成
  • 带样式的自定义 WPF ListView(使用 DataTemplate) - 如何添加标题?

    我有以下代码 行的数据模板
  • 如何通过批处理文件并行读取两个文本文件?

    有没有一种简单且性能良好的方法来并行读取两个 甚至更多 文本文件 因此 有一个循环在每次迭代中读取每个文本文件的一行 A for F不能使用给定多个文件的循环 因为它会依次读取文件 当然 嵌套的这样的循环也没有意义 诀窍是使用STDIN 重
  • iOS 中的语音输出

    是否可以访问用于辅助功能的 iOS 语音合成功能 这是一个使用的示例AVSpeechSynthesizer在 iOS 7 上 AVSpeechSynthesizer synthesizer AVSpeechSynthesizer alloc
  • Rails 检测请求是否为 AJAX

    在我的操作中 我希望仅在从 AJAX 请求调用时才响应处理 我该如何检查 我想做这样的事情 def action model Model find params id respond to do format if wasAJAXReque
  • Vue Getter & Setter 而不是后端响应中的实际值

    我是 Vue 新手 我很难理解为什么我的问题会发生 当我调用后端来检索一些数据时 响应如下 id Getter Setter name Getter Setter season Getter Setter number Getter Set
  • 使用 OpsHub 工具从本地 TFS 迁移到在线 TFS 速度缓慢

    我们有一个 50GB 的本地 TFS 集合 我们希望将其迁移到在线 TFS 我们现在使用 OpsHub Visual Studio Online Migration Utility 进行测试 一些单独的测试项目的转换似乎工作正常 因此现在我
  • Boost 的 lexical_cast 从双精度到字符串精度

    我正在使用一个不幸使用的库boost lexical cast从 a 转换double to a string 我需要能够明确地反映我这边的行为 但我希望这样做而不传播boost 我可以使用以下方法保证相同的行为吗to string spr
  • 通过 OAuth 对 Google API 进行身份验证调用时遇到问题

    当我尝试使用服务器到服务器身份验证调用 Google Directory API 时 收到错误消息 未授权访问此资源 api 我做了什么 在 Google Developers Console 中创建了一个应用程序 下载私钥并查找服务帐户名