使用Firebase进行自定义身份验证并生成JWT

时间:2017-12-04 11:02:40

标签: android mongodb firebase firebase-authentication

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

  1. 在安全服务器上生成安全令牌
  2. 验证客户端
  3. 我对生成安全令牌很困惑,我是否需要在安全的服务器上生成它?这是什么意思?我正在考虑在Android客户端本身生成令牌。

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

    相关联的Retrofit

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

    1. 从登录成功登录后获得的登录用户UID和Android客户端本身,我将生成一个安全令牌(JWT)。
    2. 使用生成的JWT,我将再次验证客户端(第二次使用firebase,最初使用我现有的身份验证机制)
    3. 生成安全令牌(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自定义身份验证。有没有更好的方法来实现上述过程?

      Firebase documentation

1 个答案:

答案 0 :(得分:0)

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

相关问题