2013-09-10 243 views
0

撥打電話後:GoogleAuthorizationCodeFlow

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
     httpTransport, JSON_FACTORY, clientSecrets, SCOPES).setDataStoreFactory(
     dataStoreFactory).build(); 
Credential cred = flow.loadCredential(userIdFromMyApplication); 

,並找到我們的userIdFromMyApplication還沒有給我們使用他們的谷歌帳戶的權限(即cred爲null)我做了以下內容:

if (cred == null) { 
    String url = flow.newAuthorizationUrl().setState("/linkaccount") 
    .setRedirectUri("http://myapp.com/oauth2.php").build(); 
    //redirect them to the url  
} 

我的問題是,一旦他們已經授予我的應用程序訪問權限和我的應用程序的oauth2重定向網址,我在我的API訪問令牌設置下被Google調用訪問code參數集,然後如何關聯此code機智h userIdFromMyApplication?在構建redirectUrl時,我需要在setState的調用中設置userIdFromMyApplication嗎?這是一個可行的慣例嗎?還是有更聰明的方法來確定訪問令牌屬於哪個用戶?

回答

1

將用戶標識存儲在您的httpSession中,或者將用戶標識(理想情況下是混淆的)添加到「state」參數中,然後該參數將包含在oauth回調中。我個人使用httpSession。

其實,第二種方法可能會帶來安全風險,所以請使用httpSession。

+0

好的,我將在不同的容器(即一箇中央Oauth2回調處理程序)下運行回調,但是我會放棄,如果約定通常使其在與請求相同的會話中運行。謝謝@pinoyyid – ThaDon

+0

您可能可以使用state參數來傳遞混淆的用戶標識。只要確保你已經考慮過任何安全隱患。 – pinoyyid

+0

現在我想到了更多,我將不得不添加一些東西到狀態參數爲了從會話中檢索uid嗎?我的場景是'[在瀏覽器中的JavaScript] == POST ==> [我的服務器] == GoogleAuthorizationCodeFlow ==> [谷歌的服務器] ==用代碼回調==> [我的服務器]'這一切都不會發生在同樣的httpsession會嗎? – ThaDon

相關問題