2015-10-14 54 views
0

如何在這些Google OAuth2抽象servlet中正確實現抽象getUserId(request)方法?如代碼所示,它用於查找和存儲谷歌憑證。我見過的例子返回會話ID,但不會正確會話期滿後工作:AbstractAuthorizationCode Servlet&CallbackServlet - 如何實現getUserId()?

  1. 用戶訪問驗證網址,他的訪問下的sessionId關鍵
  2. 在會話有效期和刷新令牌存儲在存儲,everythings工作正常,所以如果這個用戶再次訪問auth網址,他的存儲的令牌被發現具有相同的sessionId密鑰
  3. 但會話過期後(服務器重新啓動等),當這個用戶再次訪問auth url時,他得到新的sessionId,no找到存儲的令牌,因此請求新的令牌(這次僅訪問令牌),並在新會話密鑰下再次存儲。

所以問題是 - 如何生成將在所有情況下工作的userId? GoogleAppEngine實現使用已記錄的用戶,這非常好 - 但是我怎樣才能從HttpRequest參數生成這樣的userId?

BTW這個(https://developers.google.com/gmail/api/auth/web-server)Python實現似乎產生並行用戶信息請求來獲取用戶手動電子郵件......

回答

0

首先,確保你需要將用戶的憑據離線訪問。

您引用的所有示例都使用登錄用戶的原因是因爲用戶標識爲必需用於存儲憑證存儲中正確用戶的憑證。 在這些用例中,Google OAuth用於授權網絡服務器在用戶的Google帳戶中執行某些操作。

用戶ID創建一個長壽命的coookie(使用安全隨機生成器)並用它來識別用戶的一個想法,所以你知道他們是什麼時候再次訪問該網站,並且可以重用憑證(如果你要求離線訪問)。這不是非常強大,因爲用戶可以清除他們的cookie,但是沒有其他方式可以記錄用戶。

(是的,Google Oauth可以用於登錄用戶,但您仍然在尋找每次將用戶發送給Google,因此您通過這樣做確實沒有收穫)。