android - 使用 Firebase 自定义身份验证并生成 JWT

标签 android mongodb firebase firebase-authentication

我正在将 Firebase 与我现有的 Android 应用身份验证集成。根据 Firebase documentation ,需要遵循以下步骤来实现身份验证

  1. 在安全服务器上生成安全 token
  2. 验证客户端

我对生成安全 token 感到困惑,我需要在安全服务器上生成它吗?这是什么意思?我正在考虑在 android 客户端本身中生成 token 。

让我解释一下我现有的身份验证机制,在获取凭据作为输入后,它将检查通过 RetrofitMongoLab API 连接的 MongoDB

在此之后,我正在考虑通过以下方式与 Firebase 集成

  1. 我将从成功登录后获得的登录用户 UID 和 android 客户端本身生成一个安全 token (JWT)。
  2. 使用生成的 JWT,我将再次对客户端进行身份验证(第二次使用 firebase,就像最初使用我现有的身份验证机制一样)

生成安全 token (JWT)

Map<String, Object> payload = new HashMap<String, Object>();

payload.put("uid", "uniqueId1");
payload.put("some", "arbitrary");
payload.put("data", "here");

TokenGenerator tokenGenerator = new TokenGenerator("<YOUR_FIREBASE_SECRET>");
String token = tokenGenerator.createToken(payload);

验证客户端

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");

ref.authWithCustomToken(token, new Firebase.AuthResultHandler() {
    @Override
    public void onAuthenticationError(FirebaseError error) {
       System.err.println("Login Failed! " + error.getMessage());
    }

    @Override
    public void onAuthenticated(AuthData authData) {
        System.out.println("Login Succeeded!");
    }
});

这看起来像是一次往返,比如对用户进行 2 次身份验证,使用我现有的身份验证,然后再次使用 Firebase 自定义身份验证。有没有更好的方法来实现上述过程?

enter image description here

最佳答案

自定义 token 必须在后端服务器上生成。在客户端生成它会暴露您的项目凭据,从而危及您的整个用户。任何可以安装您的应用的攻击者都将能够找出您的服务帐户凭据并拥有对您的用户的完全访问权限。

关于android - 使用 Firebase 自定义身份验证并生成 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631876/

相关文章:

c# - 如何在 MongoDB 中搜索各种格式的电话号码?

javascript - 如何为 firebase 编写一个基于时间更改数据的云函数

java - Firebase 数据到 RecyclerView

java - ListView 的 NullPointerException

java - Android:仅阻止 WebView 中的垂直滚动

MongoDB 与 Couchbase 在单节点上的性能

android - 更新多个 Firebase 节点

android - 我正在尝试在 android 中拍摄连续照片

android - 可以澄清一下 <include> 和 <merge> 的用法吗

mongodb - 无法运行mongo-connector