Gmail API域范围的委派

时间:2016-08-28 08:52:23

标签: google-api google-oauth gmail-api delegation google-api-nodejs-client

我正在使用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);
  })
}

我收到错误:

  

API返回错误:错误:xxxx@xxxxx.com拒绝委托

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

enter image description here

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

如何正确设置Gmail API的域范围委派?

2 个答案:

答案 0 :(得分:1)

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

此代码:

  

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

特异性。

userId应该是“我”但是才能调用Gmail API,您需要在代码中使用服务帐户“JWT flow”来检索您想要的Gmail用户的oauth2凭据按Preparing to make an authorized API call服务帐户域范围的委派文档中所述进行访问。

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

答案 1 :(得分:-1)

有关如何正确设置Gmail API的域范围委派的问题?

我认为来自Google的documentation可以帮助您解决此问题,只需按照以下步骤委派域范围的权限。

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

  2. 从控件列表中选择安全。如果您未看到列出的安全,请从页面底部的灰色栏中选择更多控件,然后从列表中选择安全控制。如果您看不到控件,请确保以域管理员身份登录。

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

  4. 身份验证部分中选择管理API客户端访问

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

  6. 一个或多个API范围字段中,输入应授予您的应用程序访问权限的范围列表。例如,如果您的应用需要对Google Drive API和Google Calendar API进行全域访问,请输入:https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/calendar

    在您的情况下,请使用此scope for Gmail API

  7. 点击授权

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