我正在使用 Google API 开发基于 Web 的应用程序。我正在使用服务器到服务器,这显然是一个服务帐户。我快完成了。
我现在可以通过 Google api 插入新用户。我什至可以通过 Google API 创建和/或授予新创建的用户对 Team Drive 的访问权限。意思是,我有一个可以模拟所有域用户的服务帐户。
问题:但是为什么我在尝试通过 Gmail API 模拟用户时会出错?我需要向新创建的用户添加 Gmail 标签和过滤器,但我收到一条错误消息,指出“Deligation denied”。我错过了什么吗?
显然,我在 G Suite 中已经有一个具有适当范围的工作服务帐户设置。我猜用户 ID“我”不是一个选项,因为我的应用程序需要模拟一个新创建的 G Suite 用户。如果我错了,请纠正我。
$service = new \Google_Service_Gmail($this->client($scopes));
$serviceLabel = new \Google_Service_Gmail_Label();
$serviceLabel->setLabelListVisibility('labelShow');
$serviceLabel->setMessageListVisibility('show');
$serviceLabel->setName($label_name);
try {
$resp = $service->users_labels->create($email, $serviceLabel);
} catch (Google_Service_Exception $e) {
return false;
}
这是我得到的错误
{#398 ▼
+"statusCode": 403
+"errors": array:1 [▼
0 => array:3 [▼
"domain" => "global"
"reason" => "forbidden"
"message" => "Delegation denied for service-account-user@domain.com"
]
]
+"message": """
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Delegation denied for service-account-user@domain.com"
}
],
"code": 403,
"message": "Delegation denied for service-account-user@domain.com"
}
}
"""
}
预计将为通过应用程序创建的每个用户自动添加一个 Gmail 标签。