具有有效Firebase令牌的Firebase身份验证不受信任的Java客户端

时间:2018-12-26 22:15:22

标签: java firebase firebase-authentication firebase-admin

我正在构建一个带有Angular前端的小型Java客户端,以分发给客户端。

目前,我有一个通过Angular登录的屏幕,该屏幕返回有效的firebase令牌。我不确定的地方是如何使用该令牌根据应用程序的Java部分对用户进行身份验证,以便Java客户端可以执行诸如文件上传之类的操作。

使用Admin SDK,我可以执行以下操作:

public FirebaseAuth firebaseAuth() throws IOException {
    FileInputStream serviceAccount = new FileInputStream(new ClassPathResource(SERVICE_ACCOUNT_KEY).getFile());

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setDatabaseUrl(String.format("https://%s.firebaseio.com/", DATABASE_NAME))
            .build();

    FirebaseApp.initializeApp(options);

    return FirebaseAuth.getInstance();
}

然后我可以继续执行针对Firebase验证令牌并获取用户详细信息的标准流程。

由于我同时向最终用户分发了Angular前端和Java客户端,因此无法使用Admin SDK。

我该如何解决这个问题?我应该考虑其他类型的流程吗?还是可以以某种方式使用Firebase令牌?

1 个答案:

答案 0 :(得分:0)

Firebase Admin SDK不能将其访问范围限制为单个身份验证的用户。它旨在用于完全控制的后端系统。使用服务帐户初始化后,它将有权执行该服务帐户可以执行的任何操作。不应将其分发给最终用户或您完全不信任Firebase项目的任何您不信任的实体。

当涉及到对最终用户进行实际身份验证时,Firebase身份验证仅可用于客户端应用程序(Android,iOS,Web和派生环境)。