如何在Google日历中使用OAuth只能访问一个日历?

时间:2011-11-25 00:32:41

标签: php oauth-2.0

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

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

因此,我创建了OAuth 2.0帐户,在此页面添加了类/文件夹http://code.google.com/apis/calendar/v3/using.html#setup,并在测试页面上添加了正确的脚本以“授权访问您的信息”(see "Instantiating the client " in the same page) ... < / p>

以下是我的问题:如果我使用我的登录信息(不是我的客户端)登录我的Gmail,并且我转到我的测试页面,它会要求我授权访问我的Google日历。但我想要我的客户日历,而不是我的!所以,让我假装我退出,用我的客户信息登录并转到测试页面:它是完美的,我授权帐户,然后我被重定向到我的应用程序,在那里我可以看到她的日历。

但这不符合实际或逻辑......例如,我希望她的GENERAL PUBLIC网站上的人们可以访问页面,并填写表格以自动完成约会。该脚本必须检查她的谷歌日历....并获得他们的Gmail帐户的许可?不,我想要她的日历。

所以这是我的问题/问题。我究竟做错了什么?这是正确的方法,还是我错过了一步?这个API是否意味着这样做?

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

感谢所有点亮我的蜡烛

乔尔

2 个答案:

答案 0 :(得分:1)

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

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

  1. 用户拥有日历,或
  2. 所有者通过指定用户的电子邮件地址明确授予用户写入权限。
  3. 显然,第二种情况不会扩大。在任何一种情况下,您都需要在您的应用程序中嵌入客户端的凭据,然后使用它们代表经过身份验证的用户创建约会,或者与用户共享日历。当然,您需要加密客户端的凭据 - 不要简单地在应用中对其进行硬编码!

    与其使用客户的“真实”帐户不同,专门为此日历创建新帐户(使用唯一的电子邮件地址和密码)似乎更安全。然后,您的客户可以按照客户的意愿通过您的应用程序访问它,或者您可以与她共享日历并给予她写入权限。

    另一种可能性是让日历只读给用户,而不是让他们直接在客户的日历上创建约会,你的应用可以让他们请求约会:它会在用户的日历上创建活动,并向客户的日历发送邀请。然后您的应用程序将不需要任何嵌入式凭据。它还可以让您的客户有机会确认或拒绝每个约会,并自动将回复发送给她的用户。另一个好处是每个用户的约会都会出现在他/她自己的个人Google日历上。

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

答案 1 :(得分:0)

我有同样的问题,我解决了使用zend框架,即使我不喜欢它,因为它还没有,我正在尝试直接使用谷歌api。 (我不能) 我想,Zend环绕着他们。

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

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

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