2016-06-01 70 views
1

我是Google Apps域的suadmin,负责处理Calendar API。日历应用程序被标记为在管理控制台中为所有用户激活。共享参数:通过管理日历应用程序控制台共享所有信息,无需修改内部和外部用户的权限。我创建了一个共享资源并订阅了它的议程。为了简化,我与大家分享了可用性信息的议程。Google日历API Nodejs - 服务帐户 - 代理

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

现在我想要一个nodejs 服务器端应用程序与委派访问议程(即共享资源),而用户不必交互授予访问权限。所以我使用服务帐户。现在去代码。

所以创建项目后,我激活了日历API,验证了源代码(通过nodejs express脚本验证了谷歌验证页面为静态http://ip:8080并进行了验证)。域验证并不真正做出反应(没有反向DNS名称)。授权URL设置已设置,但对服务器应用程序无效,它是为浏览器端应用程序设置的。

我创建了服务帐户,使用委托并获取带有私钥的json文件并将其复制到服务器上。 OAuth2客户端创建得很好,我授权客户端ID访问Calendar 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: [] } 

服务帐户没有议程,所以它不一定是一个惊喜,但,以及,我认为通过授权访问,我可以得到域(用户和资源)中所有议程的列表。

  1. 所以我的第一个问题是为什么没有日历在这里列出?

现在我想列出我自己的议程(我是服务帐户的所有者)即将举行的活动。

function listEvents(auth) { 
    calendar.events.list({ 
    auth: auth, 
    // calendarId: 'primary', 
    calendarId: '[email protected]', 
    timeMin: new Date().toISOString(), 
    maxResults: 10, 
    singleEvents: true, 
    orderBy: 'startTime' 
    }, function(err, response) { 
    if(err) { ... } 
    var events = response.items; 
    if(events.length == 0) { ... } 
    ... 
    }); 
} 

我得到一个错误

The API call returned an error: Error: Not Found 
  • 我的第二个问题是,为什么我不能让我的用户日历 事件的访问,甚至当我指定该ID明确?

  • 我的最后一个问题将是有关获取共享资源 议程和活动的访问? ([email protected]

  • 感谢您的帮助,我会遵循这个问题

    +0

    没问题,我去掉最大胆的部分 – Gil

    +0

    看起来像你必须明确地添加的服务帐户的电子邮件地址(议程共享参数),即使你设置的公共共享功能,事件如果授予的所有@您的访问域 – Gil

    回答

    2

    (发布代表OP的)。

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

    相关问题