【问题标题】:Can I set Firebase Database rules based on Instance ID?我可以根据实例 ID 设置 Firebase 数据库规则吗?
【发布时间】:2017-11-30 12:48:25
【问题描述】:

我是 Firebase 数据库的新手,我不打算使用 Firebase 身份验证。

是否可以根据 Firebase 实例 ID 而不是经过身份验证的用户 ID 设置 Firebase 数据库规则?

这是我正在考虑实现的结构:

/instanceIDs
    /iid1
         /somedata
         /someotherdata
    /iid2
         ...
    /iid3
         ...

并且我想将读/写权限限制为仅针对该特定实例 ID

任何人都可以展示如何设置这样的规则?

否则,如果我将所有用户的读/写设置为 true,会有什么安全风险? 如果我的原生移动应用程序代码仅在特定实例 ID 分支上读取/写入,我是否会遇到一些安全问题?

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-cloud-messaging


    【解决方案1】:

    使用 Firebase 云消息传递的应用中的实例 ID 标识该特定应用在该特定设备上的安装。此值在 Firebase 安全规则中不可用。

    虽然基于此实例 ID 进行保护听起来是一个有趣的想法,但从长远来看,它不会起作用。 Instance ID can change over time,每次发生这种情况时,设备都会失去对其数据的访问权限。

    对 Firebase(数据库和存储)的访问权限通常基于应用的用户。与实例 ID 不同,用户的 ID 在一段时间内是稳定的:这意味着同一用户将始终具有相同的 UID,因此可以访问相同的资源。如果您不想让您的用户登录,您可以使用Firebase's anonymous authentication

    PS:如果您想尝试使用 Instance ID 来保护访问,您可以轻松地将 Instance ID 传递给服务器,mint a Firebase Authentication token from it(您可以use Cloud Functions for this),然后是use that custom token to sign in

    【讨论】:

    • 您好弗兰克,感谢您的回复。使用 Instance ID 的原因是因为即使没有用户登录/身份验证的负担,我也对存储首选项很感兴趣。我的应用不需要登录,但我仍然想存储用户偏好并根据这些偏好修改触发 Cloud Functions,以管理 FCM 通知。
    • Frank,你是说实例 ID 会随着时间而改变,但我认为(罕见的)令牌轮换不会影响实例 ID,我们可以假设它不会改变,除非我们以编程方式决定吗?
    • 实例 ID 确实会随着时间而改变。如果您想在不要求用户登录的情况下识别用户/设备,请考虑使用匿名身份验证:firebase.google.com/docs/auth/android/anonymous-auth
    • 这里(firebase.google.com/docs/reference/android/com/google/firebase/…)说明Instance ID只能在这4种情况下改变: 1)App删除Instance ID; 2)App在新设备上恢复; 3) 用户卸载/重新安装应用程序; 4) 用户清除应用数据
    • 在所有这些情况下,您都希望用户无法访问他们以前的数据吗?如果是这样,您可以实现一个使用实例 ID 的身份验证提供程序,如我在上一段中所述。
    猜你喜欢
    • 2020-03-04
    • 2019-01-18
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多