【问题标题】:How to use OAuth with Google Calendar to access only ONE calendar?如何将 OAuth 与 Google 日历一起使用以仅访问一个日历?
【发布时间】:2012-01-06 00:27:45
【问题描述】:

我正在为客户构建一个 Web 应用程序,但我不确定自己做的是否正确...

基本上,我创建了一个 PHP 应用程序,用于读取、编辑、删除 Google 上的日历,并在我自己的 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 并进入我的测试页面,它会要求我授权访问我的 Google 日历。但我想要我客户的日历,不是我的!所以,假设我退出,使用我的客户信息登录并进入测试页面:非常完美,我授权了帐户,然后我被重定向到我的应用程序,在那里我可以看到她的日历。

但这既不实际也不合乎逻辑...例如,因为我希望她的 GENERAL PUBLIC 网站上的人们进入一个页面,并填写表格以自动完成她的约会。脚本必须检查她的谷歌日历......并请求他们的 gmail 帐户的许可?不,我想要她的日历。

所以这是我的问题/问题。我究竟做错了什么?这是正确的方法还是我错过了一步?这个 API 是用来做这个的吗?

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

感谢大家点亮我的蜡烛

乔尔

【问题讨论】:

    标签: php oauth-2.0


    【解决方案1】:

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

    我知道这个问题已经很老了,我嵌入了 zend 加载器类和一个日历扩展。 然后我就用:

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

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

    【讨论】:

      【解决方案2】:

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

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

      1. 用户拥有日历,或
      2. 所有者已通过指定用户的电子邮件地址明确授予用户写入权限。

      显然,第二种情况无法扩展。在任何一种情况下,您都需要将客户的凭据嵌入到您的应用程序中,然后使用它们代表经过身份验证的用户创建约会,或与用户共享日历。当然,您需要对客户的凭据进行加密——不要简单地将它们硬编码到您的应用中!

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

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

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

      【讨论】:

      • 感谢您的回答。当您说“加密”时,您究竟是如何做到的?如果你加密它然后你需要访问日历,你需要在向谷歌发送请求之前解密它,因此黑客会看到解密脚本并运行它?我是否应该使用 API 密钥而不是 http://code.google.com/apis/console-help/#UsingKeys
      • 您的应用驻留在 App Engine 上,因此无需向用户传输/从用户传输客户端的凭据。您的应用只需存储和检索它们即可完成 OAuth 握手。但我越是想到应用程序允许一个人(用户)代表其他人(您的客户)执行操作的想法,我就越不舒服。如果对您有用的话,第二个选项似乎更安全且功能更丰富。
      • 好的。我正在尝试查找有关如何在我的 php 脚本中使用 api 密钥的信息,但似乎找不到它,它隐藏在哪里?当我去我的控制台时,他们唯一说的是To use this key, add the key=<your_key> parameter in all requests?如何使用“简单 API 访问”?谢谢
      猜你喜欢
      • 2020-09-08
      • 2018-06-16
      • 2011-11-21
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2014-06-14
      • 1970-01-01
      相关资源
      最近更新 更多