2011-11-25 76 views
2

我建立了一個客戶的Web應用程序,我真的不知道我在做正確的事...如何將OAuth與Google日曆一起使用來只訪問一個日曆?

基本上,我創建了一個讀取,編輯PHP應用程序,谷歌上刪除日曆和在我自己的Web應用程序數據庫上保留一份副本(出於各種原因)。現在,我瞭解了OAuth 2.0,並意識到使用它可能比我的客戶端普通Google密碼(可以直接在我的Web應用程序中訪問所有的Google服務(日曆,電子郵件等))更安全,話說,如果一個黑客進入服務器比他可以竊取她的密碼...)。

所以我建立的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​​以上述方式工作?

感謝所有,點燃我的蠟燭

喬爾

回答

1

如果我正確認識你,你已經得到了驗證正確的。問題是您不想顯示登錄用戶的日曆;你想顯示你的客戶的日曆。

用戶可以寫一個日曆兩種情形之一:

  1. 用戶擁有日曆,或
  2. 所有者已提供給用戶的寫權限明確,通過指定用戶的電子郵件地址。

顯然第二種情況並不規模。無論哪種情況,您都需要將客戶的憑證嵌入到應用程序中,然後使用它們代表經過身份驗證的用戶創建約會,或者與用戶共享日曆。當然,你會想要加密你的客戶端證書 - 不要在你的應用中對它們進行硬編碼!

而不是使用您的客戶的「真實」的帳戶,創建一個新的帳戶(具有唯一的電子郵件地址和密碼)專爲這個日曆看起來更安全。您的客戶可以通過您的應用程序按照客戶的要求訪問它,或者您可以與她共享日曆並授予她寫入權限。

另一種可能性是,使日曆的只讀到用戶,而不是讓他們直接創建約會在客戶端的日曆,你的應用程序可以讓他們要求約會:它會創建活動在用戶的日曆上發送邀請並將邀請發送到您的客戶的日曆。那麼你的應用程序將不需要任何嵌入憑證。它還會讓您的客戶有機會確認或拒絕每個約會,並自動將其回覆發送給她的用戶。另一個好處是每個用戶的約會會出現在他/她自己的個人Google日曆上。

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

+0

感謝您的回答。當你說「加密」時,你如何確切地做到這一點?如果你加密它,然後你需要訪問日曆,你需要解密它之前發送請求谷歌,因此黑客會看到解密腳本,只是運行它?我應該使用API​​密鑰,而不是'http:// code.google.com/apis/console-help /#UsingKeys'嗎? – Joel

+0

您的應用駐留在App Engine上,因此無需將客戶的憑據傳輸到用戶/從用戶傳輸。您的應用程序只需要存儲和檢索它們即可完成OAuth握手。 但我越想到允許一個人(用戶)代表別人(您的客戶)執行某個操作的應用程序,我越感到不舒服。如果第二個選項適用於您,它似乎更安全,功能更豐富。 –

+0

好的。我試圖找到如何在我的PHP腳本中使用API​​密鑰的信息,似乎無法找到它,隱藏在哪裏?當我到我的控制檯時,他們唯一說的是'要使用此密鑰,請在所有請求中添加密鑰= '?我如何使用'簡單API訪問'?謝謝 – Joel

0

我有同樣的問題,我解決了使用zend框架,即使我不喜歡它,因爲它還沒有,我正在嘗試與谷歌API直接。 (和我不能) Zend環繞他們我想。

我知道這個問題是非常古老的,我嵌入zend loader類和一個日曆擴展。 然後我就用:

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

其中$ dbcon是我的DV連接,和$ id_event是一個ID在哪裏可以找到我想要插入數據,(日期,內容,標題,時間等)。 我不喜歡它,但它的工作原理。