You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未使用全域委派时,服务账号调用Admin SDK API遇权限错误问题

问题:使用服务账号调用Google Workspace Admin SDK获取活动记录时遇401权限错误

我尝试使用服务账号通过Admin SDK获取Google Workspace活动记录,已为该服务账号分配具备Reports权限的管理员角色,但仍收到如下错误:

Access denied. You are not authorized to read activity records. [401]
Errors [
Message[Access denied. You are not authorized to read activity records.] Location[Authorization - header] Reason[authError] Domain[global]
]

报错代码片段

using Google.Apis.Admin.Reports.reports_v1;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;

var scopes = new[]
{
    ReportsService.ScopeConstants.AdminReportsAuditReadonly,
};
var serviceAccountMail = "<ServiceAccountMail>";
var serviceAccountPrivateKey = "<PrivateKey>";
var serviceAccountCredential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountMail).FromPrivateKey(serviceAccountPrivateKey)) { Scopes = scopes };
var reportsService = new ReportsService(new BaseClientService.Initializer { HttpClientInitializer = serviceAccountCredential });
var listActivitiesRequest = reportsService.Activities.List("all", ActivitiesResource.ListRequest.ApplicationNameEnum.Token);
var activities = await listActivitiesRequest.ExecuteAsync();

foreach (var activity in activities.Items)
{
    Console.WriteLine(activity);
}

对比正常运行的代码

相同配置下,调用Directory Service的代码可正常执行:

using Google.Apis.Admin.Directory.directory_v1;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;

var scopes = new[]
{
    DirectoryService.ScopeConstants.AdminDirectoryUserReadonly
};

var serviceAccountMail = "<ServiceAccountMail>";
var serviceAccountPrivateKey = "<PrivateKey>";
var serviceAccountCredential =
    new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(serviceAccountMail).FromPrivateKey(serviceAccountPrivateKey))
        { Scopes = scopes };

var directoryService = new DirectoryService(new BaseClientService.Initializer { HttpClientInitializer = serviceAccountCredential });
var listUsersRequest = directoryService.Users.List();
listUsersRequest.Customer = "<CustomerId>";
var users = await listUsersRequest.ExecuteAsync();

foreach (var user in users.UsersValue)
{
    Console.WriteLine(user);
}

服务账号权限配置

服务账号分配的自定义管理员角色包含以下权限:

  • 查看管理审核日志(Reports Audit Read)
  • 查看用户管理审核日志(Reports Audit Read User Management)
  • 查看登录审核日志(Reports Audit Read Login)
  • 查看令牌审核日志(Reports Audit Read Token)

内容的提问来源于stack exchange,提问作者Alon Shitrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:25:32