如何使用OAuth与谷歌日历访问只有一个日历


How to use OAuth with Google Calendar to access only ONE calendar?

我正在为客户构建一个web应用程序,我不确定我在做正确的事情…

基本上,我创建了一个PHP应用程序来读取,编辑,删除谷歌上的日历,并在我自己的web应用程序数据库中保留一份副本(出于各种原因)。现在,我读了关于OAuth 2.0,并意识到使用它可能比使用我的客户端通用谷歌密码(访问所有谷歌服务(日历,电子邮件等))更安全,直接在我的web应用程序中的PHP文件(换句话说,如果黑客进入服务器,他可以窃取她的密码…)。

所以我创建了OAuth 2.0帐户,从该页http://code.google.com/apis/calendar/v3/using.html#setup添加类/文件夹,并在测试页上添加适当的脚本以"授权访问您的信息"(see "Instantiating the client " in the same page)

这是我的问题:如果我用我的登录信息登录我的gmail(不是我的客户端),我去我的测试页面,它会要求我授权访问我的谷歌日历。但我要的是我客户的日程表,不是我的!所以,让我们假设我退出,用我的客户信息登录并进入测试页面:它是完美的,我授权帐户,然后我被重定向到我的应用程序,在那里我可以看到她的日历。

但这是不实际的或逻辑…因为,例如,我希望她的GENERAL PUBLIC网站上的人访问一个页面,并填写表格,以便自动完成她的约会。脚本必须检查她的谷歌日历....申请他们的gmail账号?不,我要她的日历。

这就是我的问题。我做错了什么?这是正确的做法吗,还是我漏了一步?这个API是用来做这个的吗?

如何使用API以上述方式工作?

感谢大家为我点燃蜡烛

乔尔

如果我理解正确的话,您的身份验证是正确的。问题是,您不想显示登录用户的日历;您想要显示客户端的日历。

用户可以在以下两种情况下写入日历:

  1. 用户拥有日历或
  2. 所有者通过指定用户的电子邮件地址显式地授予用户写访问权限。

显然第二种情况不成立。在这两种情况下,都需要将客户机的凭据嵌入到应用程序中,然后使用它们代表经过身份验证的用户创建约会,或者与用户共享日历。当然,您需要加密客户端的凭据——不要简单地在应用程序中硬编码它们!

与其使用客户的"真实"帐户,不如专门为此日历创建一个新帐户(具有唯一的电子邮件地址和密码),这似乎更安全。然后,您的客户可以通过您的应用程序访问它,就像她的客户一样,或者您可以与她共享日历并赋予她写权限。

另一种可能是使日历对用户只读,而不是允许他们直接在客户端的日历上创建约会,你的应用程序可以让他们请求约会:它将在用户的日历上创建事件并向客户端的日历发送邀请。这样你的应用就不需要任何嵌入凭证了。它还将使您的客户有机会确认或拒绝每个约会,并自动将她的回复发送给她的用户。另一个好处是,每个用户的约会将显示在他/她自己的个人谷歌日历。

我很想知道你(或其他人)是否能找到一个更好的解决方案。

我也有同样的问题,我使用zend框架解决了,即使我不喜欢它,因为它是,我正试图与谷歌api直接做。(我不能)

我知道这个问题很老了,反正我嵌入了zend loader类,和一个日历扩展。然后使用:

if($something) {
    $client = getClientLoginHttpClient($usergmail, $passgmail);
    createEvent($client,$dbcon,$id_event);
}

其中$dbcon是到我的dv的连接,$id_event是一个id,我可以找到我想要插入的数据,(日期,内容,标题,时间等)。我不喜欢它,但它有效。