c# - 有没有办法在不存储私钥 json 文件的情况下使用 firebase 设置服务器?
问题描述
我正在尝试创建具有独特架构的应用程序。将有一个 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"),
});
如果可能的话,我真的很希望能够维护这个架构,但是如果这根本不可能,请告诉我。
解决方案
如果您希望服务器能够以管理权限访问 Firebase,则该服务器将需要有权访问这些凭据。这意味着它可以完全访问您的 Firebase 项目中的所有内容。
如果您不希望服务器具有此类访问权限,则服务器不应访问这些凭据。
安全的解决方案是在您构建的自定义端点上托管您希望服务器能够调用的相关功能,并且只有您可以部署。这可以在您控制的服务器中,也可以在 Cloud Functions 之类的服务器上。这里的关键是只有您(或您信任的合作者)可以访问该服务器,以便其他人无法从那里获取密钥或更改代码。这也允许您在需要时收紧授权规则(例如,允许谁向谁发送通知)。
推荐阅读
- python - 如何从用户那里获取输入数字并在用python打印之前对其进行排序
- spring-boot - Spring Boot 2 WebSockets 连接意外丢失
- c# - 在 c# 中调整图像大小时调整图像中组件的大小
- opengl - OpenGL映射内存未更新
- java - 主题 [test-topic-new] 存在/不存在且 missingTopicsFatal 为真
- mysql - 如何在laravel中显示记录数?
- hdf5 - 修复损坏的 hdf5 文件
- swagger - 带有空格的 swagger-codegen 和 $ref 属性
- pandas - 如何使用带有熊猫的数据框更改 seaborn 中箱线图的轴比例?
- c# - .Net 框架中的 OnModelCreating(ModelBuilder modelBuilder)?