我正在努力將Google Apps集成到我的PHP應用程序中。我已經有一個登錄系統,它爲用戶分配一個會話ID(輸入用戶名和密碼後),當用戶登錄時,該會話ID存儲在數據庫中。在一段時間不活動後會話ID變爲無效(用戶可配置,可以是5分鐘,15,60 ...)。該會話ID在URL中傳遞以檢查用戶是否仍然登錄。註銷時,會話ID將從數據庫中刪除。Google Apps和OAuth最佳做法
我讓人們通過將他們的Google ID存儲在數據庫中,當他們登錄時登錄Google,我請求訪問令牌,查詢userinfo,查看谷歌ID是否在數據庫中,如果是,分配一個會話ID給這個用戶。由於我希望能夠查詢其他API,我還將訪問令牌json存儲在數據庫中。當用戶註銷時,訪問令牌也會從數據庫中刪除。
這工作,我的用戶可以登錄使用他們的谷歌帳戶,我可以在API的使用存儲的access_token查詢,但有些事情讓人感到笨拙讓我覺得不確定我的工作流程:
如果你force_approval你得到一個refresh_token,我覺得我應該使用這個刷新令牌來獲得一個新的訪問令牌,而不是從數據庫中刪除舊的令牌,並在用戶再次登錄時輸入一個新令牌。另一方面,登錄時,我不知道它是誰,所以我不知道使用哪個刷新令牌。也許我誤解了刷新令牌的用途。另外,我並不想每次都強制批准,所以在這種情況下我甚至不能使用refresh_token。
如前所述,用戶可以確定他們的會話將持續多長時間,但是,google access_token總是在3600秒後過期。如果用戶在系統上工作一個小時,然後谷歌API突然失效,迫使他們再次登錄,那將是非常愚蠢的。 Google OAuth操場會顯示一個複選框「過期前自動刷新令牌」,但我沒有看到如何操作。我必須在這裏使用刷新標記嗎?或者只是在後臺申請一個新的令牌(如果我不強制批准)?目前,我正在使用userinfo查詢(https://www.googleapis.com/oauth2/v2/userinfo)來查找用戶ID,但我也可以使用tokeninfo(https:///www.googleapis.com/oauth2/v1/tokeninfo)。令牌信息未列在oauth遊樂場中,但結果確實顯示了令牌的有效期(但我也可以自己計算)。一個比另一個更好嗎?我存儲整個json對象在數據庫(access_token,id_token,expires_in和token_type),但我覺得我的應用程序仍然會工作完美,如果我只存儲access_token(只有問題,我預見如果expires_in時間變化)。例如,我需要存儲id_token嗎?
我發現谷歌文檔(在developers.google.com)有時也很缺乏的,如果任何人知道的任何其他信息的良好來源,我感興趣的是他們。
非常感謝您的意見,我會閱讀您提供的文章,並希望他們能夠一路幫助我。 – Bram 2012-03-12 12:06:40