【问题标题】:Android + Firebase Auth + REST API: How to properly work with token?Android + Firebase Auth + REST API:如何正确使用令牌?
【发布时间】:2018-10-24 17:17:02
【问题描述】:

我正在开始一个新项目,而 Firebase Auth 是身份验证的选择。这个想法是通过 Firebase Auth 创建/登录用户,然后使用 Firebase ID 令牌在我的后端进行身份验证(通过 Authentication 标头)。

在 Google Samples 中,这是我获取令牌的方式:

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 API?还是使用 Firebase ID 令牌是最好的?如果是这样,我应该如何为每个 REST API 调用包装这个 id 令牌获取?

如果您以后有更好的方法来验证用户以调用 rest api,我会全力以赴。

【问题讨论】:

  • 您的后端使用哪种技术编写?我想你也可以在那里修改代码?
  • @LeviAlbuquerque 后端也是新的。我们正在.net core 上编写它。同样,如果有任何其他技术可以更好地应对这种情况,我会全力以赴。
  • 如果您的后端是 admin sdk 支持的后端之一,您可以以更简单的方式管理登录 firebase.google.com/docs/auth/admin/create-custom-tokens 但为此您需要一个 python,go,node。原生支持的 js 或 java 后端
  • 也许我可以混合使用两种后端技术:.net core 和 go。你怎么看?
  • 我认为这不明智。但是让我问你一个问题,你打算如何确认用户发送的 id 令牌?

标签: android api firebase firebase-authentication restful-authentication


【解决方案1】:

所以这个想法很简单。如您所知,您可以在 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();
            }
        }
    });

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

【讨论】:

  • 这是一个非常糟糕的主意,并破坏了使用 FirebaseAuth 的第一个目的。一种更好的方法是创建一个 firebase 自定义令牌。但最好的方法可能是在令牌更改时听取 firebase 或检查 Firebase 实际上是否始终异步。
  • 您有示例或博客链接吗?我不太了解协议。这个公认的答案是利用 Android 轻松使用 Google Auth、Facebook Auth 等。但是,如果你有一个自定义 API 和你自己的数据库,除了身份验证之外,你将如何继续?
猜你喜欢
  • 2018-03-27
  • 2021-09-22
  • 2019-08-18
  • 2016-11-15
  • 2020-08-29
  • 2023-01-09
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多