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 可以帮助您解决这个问题,只需按照以下步骤委托全域权限即可。
转到您的 Google Apps 域的管理控制台。
Select Security 来自控件列表。如果您没有在页面底部的灰色栏中看到 安全性,select 更多控件,然后 select Security 来自控件列表。如果您看不到控件,请确保您以域管理员身份登录。
Select 显示更多 然后从选项列表中选择 高级设置。
Select 管理 API 客户端访问 在 身份验证 部分。
在客户端名称字段中输入服务帐户的客户端ID。您可以在 服务帐户 页面中找到您的服务帐户的客户端 ID。
在 一个或多个 API 范围 字段中输入您的应用程序应被授予访问权限的范围列表。例如,如果您的应用程序需要在域范围内访问 Google 驱动器 API 和 Google 日历 API,请输入:https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.
在你的情况下,使用这个 scope for Gmail API。
单击授权。
有关 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
我正在使用 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 可以帮助您解决这个问题,只需按照以下步骤委托全域权限即可。
转到您的 Google Apps 域的管理控制台。
Select Security 来自控件列表。如果您没有在页面底部的灰色栏中看到 安全性,select 更多控件,然后 select Security 来自控件列表。如果您看不到控件,请确保您以域管理员身份登录。
Select 显示更多 然后从选项列表中选择 高级设置。
Select 管理 API 客户端访问 在 身份验证 部分。
在客户端名称字段中输入服务帐户的客户端ID。您可以在 服务帐户 页面中找到您的服务帐户的客户端 ID。
在 一个或多个 API 范围 字段中输入您的应用程序应被授予访问权限的范围列表。例如,如果您的应用程序需要在域范围内访问 Google 驱动器 API 和 Google 日历 API,请输入:https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.
在你的情况下,使用这个 scope for Gmail API。
单击授权。
有关 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