我在我的應用中使用Google登錄功能,一旦用戶登錄並檢索到ID令牌,我就會將ID令牌發送到反手服務器。現在我將ID標記添加到每個HTTP請求的標題中,然後驗證它,獲取用戶標識並將數據回覆給我的應用程序。我想知道是否可以持久存儲ID令牌並將其用於將來的所有請求。 ID令牌會改變或過期一段時間嗎?如果是這樣,如何獲得新的ID令牌?除了要求用戶重新登錄之外,我找不到任何其他方法。或者,我是否應該只驗證一次ID標記並在將來的請求中直接使用ID?我應該在ID登錄中持久存儲ID令牌嗎?
2
A
回答
2
不要存儲ID令牌。 Google ID令牌的發佈時間爲一小時有效期,並會過期,您只需在您的應用中使用silentSignIn即可在沒有任何用戶互動的情況下獲取新的令牌。如果您的現有令牌尚未過期,則會返回(緩存)的版本(OptionalPendingResult
返回將有isDone() == true
);如果它已經過期,你會得到一個刷新的(但它會花一點時間,因此OptionalPendingResult isDone()
將false
)。
這裏是sample code(UI線程,請參閱以下注意有關工作線程):
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
...
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (opr.isDone()) {
// If the user's cached credentials are valid, the OptionalPendingResult will be "done"
// and the GoogleSignInResult will be available instantly.
Log.d(TAG, "Got cached sign-in");
GoogleSignInResult result = opr.get();
handleSignInResult(result); // result.getSignInAccount().getIdToken(), etc.
} else {
// If the user has not previously signed in on this device or the sign-in has expired,
// this asynchronous branch will attempt to sign in the user silently. Cross-device
// single sign-on will occur in this branch.
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
handleSignInResult(googleSignInResult); // result.getSignInAccount().getIdToken(), etc.
}
});
}
請記住無論你在UI線程或工作者線程中調用silentSignIn
。如果你打電話給工作者線程,看看這個帖子blockingConnect()
+ await()
,這簡化了很多代碼: Silent sign in to retrieve token with GoogleApiClient
相關問題
- 1. 登錄令牌應該過期嗎?
- 2. 在iOS中存儲令牌ID
- 3. 爲什麼我應該存儲持久登錄cookie和密碼重置令牌的散列?
- 4. 我應該在Redis中存儲JWT令牌嗎?
- 5. 我應該在ViewState中存儲數據庫ID字段嗎?
- 6. Google登錄Android版無效ID令牌
- 7. 解碼ID令牌雅虎登錄
- 8. RingOut ID應該持續多久?
- 9. 令牌認證登出:我應該刪除令牌嗎?
- 10. OAuth2令牌應該存活多久?
- 11. 如何存儲firebase實例id令牌?
- 12. iPhone的唯一ID最好保存在持久存儲中?
- 13. 如何最好地存儲從登錄到註銷必須持久的ID
- 14. 自動登錄存儲訪問令牌
- 15. OAuth:我應該在令牌中存儲哪些信息
- 16. unqualified-id令牌
- 17. 持久登錄
- 18. 無法從谷歌在Android谷歌登錄獲取令牌ID
- 19. 使用持久cookie的登錄ID的風險
- 20. 我應該在哪裏存儲訪問令牌
- 21. Salesforce MobileSDK iOS持久保存OAuth令牌
- 22. 我應該如何根據令牌登錄用戶?
- 23. 我應該如何持久地存儲一個變量?
- 24. Mysql。我應該使用ID嗎?
- 25. 我應該放棄Integer ID for RavenDB嗎?
- 26. Mysql - 我應該使用ID列嗎?
- 27. 我應該使用整數主ID嗎?
- 28. 保存非持久對象ID
- 29. Rails路由/我應該指向登錄用戶的/ account /:id
- 30. $ id令牌是JSON標準嗎?