Gmail API 全域委派

Gmail API domain-wide delegation

我正在使用 Gmail API,我正在尝试从公司下的所有用户那里获取电子邮件。但是当我 运行 代码如:

function runAPI(auth) {
  var gmail = google.gmail('v1');
  gmail.users.threads.list({auth: auth, userId: '108800016305523828361'},'',function(err, response){
    if (err) {
      console.log("The API returned an error: " + err);
      return;
    }
    var threads = response.threads;
    console.log(threads);
  })
}

我收到错误:

The API returned an error: Error: Delegation denied for xxxx@xxxxx.com

我在管理控制台中这样做了:

作为客户端名称,我使用了 client_secret.json 文件中的 ID。对于范围,我给了它所有权限。

如何正确设置 Gmail 的全域授权 API?

关于如何正确设置 Gmail 的全域委派问题 API?

我认为来自 Google 的 documentation 可以帮助您解决这个问题,只需按照以下步骤委托全域权限即可。

  1. 转到您的 Google Apps 域的管理控制台。

  2. Select Security 来自控件列表。如果您没有在页面底部的灰色栏中看到 安全性,select 更多控件,然后 select Security 来自控件列表。如果您看不到控件,请确保您以域管理员身份登录。

  3. Select 显示更多 然后从选项列表中选择 高级设置

  4. Select 管理 API 客户端访问 身份验证 部分。

  5. 客户端名称字段中输入服务帐户的客户端ID。您可以在 服务帐户 页面中找到您的服务帐户的客户端 ID。

  6. 一个或多个 API 范围 字段中输入您的应用程序应被授予访问权限的范围列表。例如,如果您的应用程序需要在域范围内访问 Google 驱动器 API 和 Google 日历 API,请输入:https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.

    在你的情况下,使用这个 scope for Gmail API

  7. 单击授权

有关 error 403 or Delegation denied for <user email> 的更多信息,请查看此相关的 SO 问题:

  • Gmail API returns 403 error code and “Delegation denied for user email"

  • GMail API Super Admin access other users accounts via API?

设置很好,但是在您的代码中您做错了。

此代码:

gmail.users.threads.list({auth: auth, userId: '108800016305523828361'},'',function(err, response)

具体来说。

userId 应该是 "me" 但是 在调用 Gmail 之前 API 你需要在你的代码中使用服务帐户 "JWT flow"为您要访问的 Gmail 用户检索 oauth2 凭据,如 Preparing to make an authorized API call 服务帐户全域授权文档中所述。

具体来说,这会使用您的服务帐户的私钥来请求为您想要的用户获取凭据(在您的域中设置您要在 setServiceAccountUser(user@example.com) 函数中访问的用户电子邮件在请求中 )。然后您可以在调用 Gmail API.

时使用 GoogleCredential