Android + Firebase Auth + REST API:如何正确使用令牌?

Android + Firebase Auth + REST API: How to properly work with token?

我正在开始一个新项目,Firebase Auth 是身份验证的选择。我的想法是 create/login 用户通过 Firebase 身份验证,然后使用 Firebase ID 令牌在我的后端进行身份验证(通过身份验证 header)。

在 Google 示例中,这是我应该获取令牌的方式:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

但是,如您所见,这是一个异步调用,因为它转到 Firebase 服务器为我获取令牌。所以,每次 REST API 调用我的后端,我都需要 运行 上面的代码,因为我不知道令牌什么时候过期。

是否有更好的方法来使用 Firebase Auth 安全调用我的后端 REST APIs?或者使用 Firebase ID Token 是最好的?如果是这样,我应该如何为每个 REST API 调用包装这个 id 令牌?

如果您有更好的方法来验证用户身份以稍后调用 rest api,我洗耳恭听。

所以这个想法很简单。您可以在 Android 设备中使用此方法,因为您已经知道:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

持有令牌实例后,将其发送到后端进行身份验证,它将仅进行一次身份验证,并向后端发送一个由后端本身管理的令牌。那是将在后续每次调用后端时发送的令牌,而不是上述方法生成的令牌。