如何处理“访问被拒绝。您无权阅读活动记录”。使用服务帐户访问 Admin SDK API 时

Posted

技术标签:

【中文标题】如何处理“访问被拒绝。您无权阅读活动记录”。使用服务帐户访问 Admin SDK API 时【英文标题】:How to deal with "Access denied. You are not authorized to read activity records." when using service account access Admin SDK API 【发布时间】:2021-11-22 21:06:55 【问题描述】:

我在尝试使用服务帐户访问 Admin SDK API 以获取一些 audit report 时遇到问题。

我已联系我的工作区管理员授予Domain-wide Delegation 和服务帐户clientID,这是我从https://console.cloud.google.com/ 上的帐户项目创建的。但是当我在quickstart.php 中执行相同的步骤时,它总是返回此错误,代码为401


   "message": "Access denied. You are not authorized to read activity records.",
   "domain": "global",
   "reason": "authError",
   "location": "Authorization",
   "locationType": "header"

这是我的 PHP 脚本:

$sa_credential = '<path/to/my/redentials.json>';
try 
     $client = new Google\Client();
     if (file_exists($sa_credential)) 
        // set the location manually
        $client->setAuthConfig($sa_credential);
      elseif (getenv('GOOGLE_APPLICATION_CREDENTIALS')) 
        // use the application default credentials
        $client->useApplicationDefaultCredentials();
      else 
         echo 'Missing credential file!';
         return;
     
    $client->setApplicationName("PHP_Reports_API");
    $client->addScope('https://www.googleapis.com/auth/admin.reports.audit.readonly');
    $client->setSubject('<my_account_email>');
    $service    = new Google\Service\Reports($client);
    $userKey = 'all';
    $applicationName = 'login';
    $optParams = array(
                   'maxResults' => 10,
                 );
    $results = $service->activities->listActivities($userKey, $applicationName, $optParams);
    print_r($results);
    return $result;
 catch (Google_Service_Exception $ex) 
    print_r(json_encode($ex->getErrors()));
    return false;

【问题讨论】:

邮箱&lt;my_account_email&gt;的用户是否有权阅读活动记录? 所以我们必须为报告授予管理员角色,对吧?如果我没有设定主题呢?服务帐号将使用哪个帐号? 【参考方案1】:

使用域范围委派时,您需要模拟具有所需访问权限的用户

要访问admin activity reports,需要代表具有管理员权限的用户执行请求:

$client-&gt;setSubject('&lt;emai_of_your_domain_admin&gt;')

【讨论】:

感谢您的回复,所以我必须设置他们有权访问管理员审计报告的任何用户的电子邮件?我在角色管理中看到,我可以创建一个自定义角色然后检查Report 权限,对吧? 非常感谢,我尝试为用户授予权限Reports,API 可以返回响应,但是我的 API 结果有其他问题,看起来不是实时的跨度> 很高兴它对你有用!至于延迟 - 这是一个不同的问题,但请看这里:support.google.com/a/answer/7061566?hl=en 我已经看过这篇文章了,当报告不是实时的时候有点失望......:(

以上是关于如何处理“访问被拒绝。您无权阅读活动记录”。使用服务帐户访问 Admin SDK API 时的主要内容,如果未能解决你的问题,请参考以下文章

淘集集免费打单,如何处理任务单?

如何处理 JSON 响应

如何处理尝试捕获异常android

“不知道如何处理' nvcc 致命错误

如何处理所有的贬低

c# FileSystemWatcher如何处理多个文件?