【问题标题】:Is there a way to set up a server using firebase without storing the private key json file?有没有办法在不存储私钥 json 文件的情况下使用 firebase 设置服务器?
【发布时间】:2020-01-12 16:55:29
【问题描述】:

我正在尝试创建具有独特架构的应用程序。将有一个 android 应用程序、一个服务器和一个桌面客户端。问题是,服务器将由用户在本地托管(遵循 linux 上的 mopity 架构)。也就是说,每个用户将在本地托管他们自己的服务器,只有他们使用,他们可以在不使用客户端/Android 应用程序时将其关闭。

此应用程序要求服务器能够向 android 应用程序发送信息,看来唯一真正的解决方案是 firebase 云消息传递(但如果有好的替代方案请纠正我)。问题似乎是firebase需要服务器存储并提供私钥json文件的路径。将此密钥分发给所有用户显然是不安全的。我想知道这个问题是否有更好的解决方案?

我尝试过的:

  • 我创建了一个 android 应用程序,并使用 android studio 工具将 firebase 添加到项目中,并在控制台中创建了一个 firebase 项目。

  • 然后我从控制台下载了私钥并在我的服务器代码中使用了它

  • 应用程序和服务器可以通信,但从安全角度来看,这种架构似乎并不理想。

服务器 (C#) firebase 连接代码:

FirbaseApp FBApp = FirebaseApp.Create(new AppOptions()
            {
                Credential =
                    GoogleCredential.FromFile(
                        "/path/to/json/file/firebase-adminsdk*.json"),
            });

如果可能的话,我真的希望能够维护这个架构,但是如果这根本不可能,请告诉我。

【问题讨论】:

    标签: c# android firebase firebase-cloud-messaging


    【解决方案1】:

    如果您希望服务器能够以管理权限访问 Firebase,则该服务器将需要有权访问这些凭据。这意味着它可以完全访问您的 Firebase 项目中的所有内容。

    如果您不希望服务器拥有此类访问权限,则服务器应该从不有权访问这些凭据。

    安全的解决方案是在您构建的自定义端点上托管您希望服务器能够调用的相关功能,并且只有您可以部署。这可以在您控制的服务器中,也可以在 Cloud Functions 之类的服务器上。这里的关键是只有您(或您信任的合作者)可以访问该服务器,以便其他人无法从那里获取密钥或更改代码。这还允许您在需要时收紧授权规则(例如,允许谁向谁发送通知)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-05
      • 2017-05-16
      • 2020-02-03
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多