【问题标题】:Firebase SDK Admin setCredentials other than static JSON fileFirebase SDK Admin setCredentials 不是静态 JSON 文件
【发布时间】:2018-08-07 14:21:55
【问题描述】:

我一直在使用 Google 的 Firebase Admin SDK,虽然我已经配置并创建了我需要推送通知的客户端,但 FCM 项目的凭据设置方式并不让我满意。

目前,我正在使用提供的 JSON 文件设置我的项目凭据,该文件当前存储在我的服务器的文件系统中,并如相关文档所示进行检索:

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions options = new FirebaseOptions.Builder()
  .setCredentials(GoogleCredentials.fromStream(serviceAccount))
  .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
  .build();

虽然这在大多数情况下都可以正常工作,但它确实会增加额外的负载维护以及另一个故障点(例如,有人错误地删除了凭据文件)。

从文档中,我看到用于 NodeJs 的 SDK 允许临时设置项目相关的凭据,这意味着不需要存在 JSON 文件。此外,文档似乎提到身份验证可以通过其他方式进行(但他们没有详细说明),正如相关行所见:

The Admin SDKs can alternatively be authenticated with a different credential type

请注意,这几乎可以肯定是关于 Google Cloud Platform,但它似乎留下了一个打开的窗口,暗示其他版本的 SDK 也可能发生这种情况。

现在我的问题如下。假设我不想处理存储在文件系统中的 JSON 文件上的凭据存储,Java SDK 是否有另一种方法来检索它们?

欢迎任何帮助。

【问题讨论】:

  • GoogleCredential Javadoc 显示了使用其构建器创建凭据的几种方法,您还可以在代码中使用 InputStream 的许多不同实现。您不受 API 限制为FileInputStream

标签: java firebase firebase-authentication firebase-cloud-messaging firebase-admin


【解决方案1】:

请注意,GoogleCredentials.fromStream(serviceAccount) 实际上并不是从文件中读取。它是从 InputStream 中读取的。 InputStream 在您的代码中恰好是 FileInputStream。

您可以使用任何 InputStream 来为您的代码提供您正在寻找的凭据,因此您可以选择尽可能多的流类型作为数据源。

只有你知道你真正的选择是什么,因为我们这些阅读问题的人并不熟悉你的运行时环境或你如何打包你的代码。但我相信你在这里有很大的灵活性。

【讨论】:

  • 果然你是对的,我在问题中的措辞可能并不完全正确。让我重新表述一下。我确实知道我可以使用我喜欢的任何 InputStream,例如我正在考虑将它们存储在数据库中并从那里检索它们。我的主要问题是,有没有办法通过提供相关项目的帐户凭据从 Google 临时检索它们?
  • 没有。您可以将凭据视为密码。使用 API 来检索密码打开了各种安全问题的大门。或者,拥有一个密码来获取另一个更安全的密码似乎也是一个问题。使用时需要提供“密码”。
猜你喜欢
  • 2020-04-03
  • 2018-03-20
  • 2020-03-13
  • 2013-01-15
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2017-09-27
相关资源
最近更新 更多