アプリでGoogleのサインインを使用しています。ユーザーがサインインしてIDトークンを取得するとすぐにIDトークンをバックハンドサーバーに送信します。今のところ、IDトークンを各HTTP要求のヘッダーに追加して検証し、ユーザーのIDを取得し、データをアプリケーションに返信します。 IDトークンを永続的に保存し、今後のすべての要求に使用することができれば、私は疑問に思っています。 IDトークンが変更されるか、しばらく時間切れになりますか?もしそうなら、新しいIDトークンを取得する方法は?ユーザーに再度サインインするように求める以外の方法はありません。または、IDトークンを1回だけ検証し、将来の要求でIDを直接使用する必要がありますか?GoogleトークンにIDトークンを永続的に保存する必要がありますか?
2
A
答えて
2
IDトークンは保存しないでください。 Google IDトークンは有効期限1時間で発行され、有効期限が切れます。アプリでsilentSignInを使用するだけで、ユーザーの操作なしで新しいIDトークンを取得できます。既存のトークンがまだ有効期限切れでない場合は、(キャッシュされた)バージョンが返されます(OptionalPendingResult
が返されます)。isDone() == true
が返されます。既に有効期限が切れている場合は、最新のものを取得します(ただし、少し時間がかかるため、OptionalPendingResult isDone()
はfalse
になります)。ここで
は(UIスレッド、ワーカースレッドについては、以下の注を参照)sample codeです:
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. Redis接続を永続的に保つ必要がありますか?
- 2. JWTトークンを赤字で保存する必要がありますか?
- 3. GitHubにキー&トークンを含むファイルをどこに保存する必要がありますか?
- 4. OpenID Connect - この場合、idトークンを保護されたリソースに送信する必要がありますか?
- 5. APNSトークンを暗号化する必要がありますか?
- 6. firebase verify idトークン:Firebase IDトークンに不正な「iss」があります
- 7. 要求ごとにcsrfトークンを含める必要がありますか?
- 8. ファイルを永続的に保存する
- 9. oauth2トークンを永続的に使用する方法は?
- 10. GMAIL API - 永続的なトークンへのアクセス
- 11. Googleログイン - 退出時にユーザーの詳細を永久に保存する必要があります
- 12. 永続的使用のためにNSCalendarオブジェクトを保持する必要がありますか?
- 13. Ruby On Railsでトークンをデータベースに格納する必要がありますか?
- 14. イメージをデータベースに保存する必要がありますか?
- 15. ループバック時の永続トークン
- 16. ADAL 3トークンの永続性
- 17. PHPのGoogle IDトークンの情報がありません
- 18. FCMトークンを保存する
- 19. サーバー側の認証にjwtトークンを格納する必要があります
- 20. エラー: '{'トークンの前にunqualified-idが必要です。
- 21. ' - 'トークンの前にunqualified-idが必要です
- 22. '&'トークンの前にunqualified-idが必要です
- 23. エラー: '<'トークンの前にunqualified-idが必要です。
- 24. "'トークン'の前にunqualified-idが必要です。 - C++
- 25. リクエストごとにトークンをリフレッシュする必要はありますか?
- 26. firebaseインスタンスIDトークンの保存方法は?
- 27. localstorageとインターセプタにトークンを保存する
- 28. APIトークンをローカルストレージに保存するReactJS
- 29. トークンをローカルストアに保存する
- 30. ログイン後にuserDefaultトークンを保存する