首页 > 解决方案 > 使用服务帐户的 Gmail API 收到委派被拒绝错误消息

问题描述

我正在使用 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 标签。

标签: google-apigmail-apiservice-accountsgoogle-workspacegoogle-php-sdk

解决方案


推荐阅读