使用GCP服务帐户创建Google日历活动

问题描述 投票:0回答:1

我想操纵事情,以便我的GCP服务帐户可以邀请用户参加日历活动。因此,例如[email protected]将邀请[email protected]参加活动。在我看来,这应该可以简单地通过授予[email protected]使用Calendar API的权限,而无需[email protected]授予任何其他权限。

我尝试实现此example,但用日历范围和日历API调用替换了计算范围和计算API调用。我的代码返回错误

Insufficient Permission: Request had insufficient authentication scopes.

我在互联网上闲逛了一堆,我无法确定问题是否出在我做错了,还是问题在于Google不支持我想做的事情。

我将不胜感激。

这是我的代码:

const {google} = require('googleapis');
const compute = google.compute('v1');

const {GoogleAuth} = require('google-auth-library');

async function main() {
  const auth = new GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/calendar',
      'https://www.googleapis.com/auth/compute']
  });

  //keeping the compute stuff in as a sanity check
  //to ensure that the problem is with calendar, not something more general
  const authClient = await auth.getClient();
  const project = await auth.getProjectId();
  const res = await compute.zones.list({project, auth: authClient});
  console.log(res.data);

  createEvent(auth);
}

/**
 * Lists the next 10 events on the user's primary calendar.
 * @param {google.auth.OAuth2} auth An authorized OAuth2 client.
 */
function createEvent(auth) {
  const calendar = google.calendar({version: 'v3', auth});
  calendar.events.insert({
        calendarId: 'primary',
        event: {
          "description": "my test event",
          "start": {
            "date": "2020-05-20",
          },
          attendees: [{email: "[email protected]"}]
        }
      }
  );
}

main().catch(console.error);
google-calendar-api service-accounts
1个回答
1
投票

答案:

您需要在三个位置启用API并提供范围:在您的身份验证代码中,在GCP控制台中和Google Admin控制台中。

更多信息:

正如我在评论中所解释的那样,您提供的代码应该可以正常运行。 Insufficient Permission: Request had insufficient authentication scopes.错误是由于服务帐户无法访问Google一方所需的范围所致。

确保已完成以下步骤:

  1. 在应用程序中将范围提供为auth对象(您已经完成):
const auth = new GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/calendar',
      'https://www.googleapis.com/auth/compute']
  });
  1. 为您的服务帐户GCP项目启用了GCP console中的Calendar API。
  2. 在GCP的OAuth同意屏幕设置中为您的服务帐户提供了必需的范围。
  3. Google Admin console中的服务帐户添加了必需的范围。这是通过遵循Security > Advanced Settings > Manage API client access UI元素并将服务帐户所需的all范围分配给服务帐户客户端ID来完成的。

注意:此最后一步必须由域管理员完成,不能由非域管理员完成。

在这种情况下,您需要联系您的域管理员以授予您的项目API访问权限。

希望对您有帮助!

参考:


相关答案:

© www.soinside.com 2019 - 2024. All rights reserved.