我应该在谷歌登录中持久存储ID令牌吗



我在我的应用程序中使用谷歌登录,一旦用户登录并检索到ID令牌,我就会将ID令牌发送到我的反手服务器。现在,我将把ID令牌添加到每个HTTP请求的头中,并对其进行验证,获取用户的ID并将数据返回到我的应用程序。我想知道是否可以持久地存储ID令牌,并在将来的所有请求中使用它。ID令牌是否会更改或过期一段时间?如果是,如何获取新的ID令牌?除了要求用户再次登录外,我找不到其他方法。或者我应该只验证ID令牌一次,并在未来的请求中直接使用ID?

不要存储ID令牌。谷歌ID代币的有效期为一小时,将过期,您只需在应用程序中使用silentSignIn即可获得新代币,而无需任何用户交互。如果您现有的令牌尚未过期,您将取回(缓存的)版本(返回的OptionalPendingResult将具有isDone() == true);如果它已经过期,您将获得一个刷新的(但它需要更长的时间,因此OptionalPendingResult isDone()将是false)。

以下是示例代码(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。如果您在worker线程上调用它,请使用blockingConnect()+await()来查看这篇文章,它大大简化了代码:使用GoogleApiClient 进行静默登录以检索令牌

相关内容

  • 没有找到相关文章

最新更新