【问题标题】:Custom Authentication with Firebase and Generating JWT使用 Firebase 进行自定义身份验证并生成 JWT
【发布时间】:2018-05-17 19:56:15
【问题描述】:

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

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

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

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

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

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

生成安全令牌 (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!");
    }
});

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

【问题讨论】:

    标签: android mongodb firebase firebase-authentication


    【解决方案1】:

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

    【讨论】:

    • 您需要一个应用服务器。用于生成自定义令牌的机制必须在那里运行,而不是在客户端上运行。这可以保护您的私钥不被盗。
    猜你喜欢
    • 2016-07-09
    • 2019-03-21
    • 2020-04-22
    • 2017-01-01
    • 2017-07-03
    • 2018-07-16
    • 2019-12-08
    • 2019-10-25
    • 2020-04-01
    相关资源
    最近更新 更多