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

时间:2020-05-12 05:01:46

标签: google-calendar-api service-accounts

我想装配东西,以便我的GCP服务帐户可以邀请用户参加日历活动。因此,例如my-service-account@myproject.iam.gserviceaccount.com将邀请user@myCorporation.com参加活动。在我看来,这可以简单地通过向my-service-account@myproject.iam.gserviceaccount.com授予使用Calendar API的权限而无需向user@myCorporation.com授予任何其他权限来实现。

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

Insufficient Permission: Request had insufficient authentication scopes.

我在互联网上闲逛了一堆,我无法确定问题出在我做错了还是谷歌不支持我的工作。

我将不胜感激。

这是我的代码:

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: "myGuest@mailinator.com"}]
        }
      }
  );
}

main().catch(console.error);

1 个答案:

答案 0 :(得分:2)

答案:

您需要在三个位置启用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 console中为您的服务帐户GCP项目启用了日历API。
  2. 在GCP的OAuth同意屏幕设置中为您的服务帐户提供了必需的范围。
  3. Google Admin console的服务帐户中添加了必需的范围。这是通过遵循Security > Advanced Settings > Manage API client access UI元素并将服务帐户所需的 all 作用域分配给服务帐户客户端ID来完成的。

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

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

我希望这对您有帮助!

参考文献:


相关答案: