Google calendar api 谷歌日历API节点-服务帐户-委派

Google calendar api 谷歌日历API节点-服务帐户-委派,google-calendar-api,google-apps,google-api-nodejs-client,Google Calendar Api,Google Apps,Google Api Nodejs Client,我是一个谷歌应用领域的suadmin,正在开发日历API。日历应用程序在管理控制台中标记为已为所有用户激活。共享参数:通过Admin Calendar应用程序控制台共享所有信息,无需内部和外部用户的修改权限。我创建了一个共享资源并订阅了它的议程。为了简化,我为每个人分享了可用性信息的议程 我用不同的方法实现了一个应用程序,以找到最适合我的。从Google应用程序脚本(HTML)、浏览器端脚本和nodejs服务器端脚本(浏览器端授权),一切正常。用户总是被要求通过谷歌登录和权限对话框以交互方式授予

我是一个谷歌应用领域的suadmin,正在开发日历API。日历应用程序在管理控制台中标记为已为所有用户激活。共享参数:通过Admin Calendar应用程序控制台共享所有信息,无需内部和外部用户的修改权限。我创建了一个共享资源并订阅了它的议程。为了简化,我为每个人分享了可用性信息的议程

我用不同的方法实现了一个应用程序,以找到最适合我的。从Google应用程序脚本(HTML)、浏览器端脚本和nodejs服务器端脚本(浏览器端授权),一切正常。用户总是被要求通过谷歌登录和权限对话框以交互方式授予访问权限

现在我想要一个nodejs服务器端应用程序,该应用程序具有对议程(即共享资源)的委托访问权,而用户不必以交互方式授予访问权。所以我使用的是一个服务帐户。现在开始编码

于是创建了项目,我激活了日历API,验证了源代码(google验证页面由nodejs express脚本静态提供并验证)。域验证没有真正意义上的sens(没有反向DNS名称)。授权URL设置已设置,但对服务器应用程序无效,它是为浏览器端应用程序设置的

我创建了一个服务帐户,通过委托获得了带有私钥的json文件,并将其复制到服务器上。OAuth2客户机创建得很好,我授权客户机ID访问日历API R/W。一切似乎都很好

var google = require('googleapis')
var calendar = google.calendar('v3')
var scopes = ['https://www.googleapis.com/auth/calendar']
var key = require ('./xxx'); // private json
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, scopes, null );
jwtClient.authorize(function(err, token) {
  if(err) { ... }
  console.log('token',token);
  listCalendars(jwtClient);
});
脚本正在获得授权,我获得了访问令牌

{ access_token: 'xxxxxxxxxx',
  token_type: 'Bearer',
  expiry_date: 1464780030000,
  refresh_token: 'jwt-placeholder' }
调用calendarList.list成功

function listCalendars(auth) {
  calendar.calendarList.list({ auth: auth }, function(err, response) {
    if (err) { ... }
    console.log(response);
    listEvents(auth)
  })
}
但没有物品

{ kind: 'calendar#calendarList',
  etag: '"1464776865512000"',
  nextSyncToken: 'xxxxxx',
  items: [] }
服务帐户没有议程,所以这不一定令人惊讶,但是,好吧,我认为通过委托访问,我可以获得域中所有议程(用户和资源)的列表

  • 所以我的第一个问题是为什么这里没有列出日历
  • 现在我想列出我自己议程中即将发生的事件(我是服务帐户的所有者)

    我犯了一个错误

    The API call returned an error: Error: Not Found
    
  • 我的第二个问题是为什么我无法访问我的用户日历 事件,即使我明确指定了ID

  • 我的最后一个问题是关于访问共享资源 议程和活动?(mydomain.tld)_xxxxxxxx@resource.calendar.google.com)

  • 感谢您的帮助,我将继续解决这个问题(代表OP发布)


    必须为每个日历明确设置服务帐户的电子邮件地址以供共享,即使该日历是公开共享的。

    没问题,我删除了大部分粗体部分,例如您必须明确添加服务帐户的电子邮件地址(议程共享参数),即使您设置了公开共享,事件,如果您授予对所有@您的域的访问权限
    The API call returned an error: Error: Not Found