firebase - 如何在 Firebase 应用中生成安全邀请令牌?
问题描述
我有一个使用实时数据库和云功能的 Firebase 应用
在我的应用程序中,用户是组的一部分,并且可以访问组中的所有数据
我正在尝试为用户创建一种方式来邀请另一个用户加入群组
例子:
- 首先,Alice 登录。
- 她创建了一个新的邀请 URL
- 在数据库中,创建了一个新条目,其中包含一个随机 uid、到期令牌和一个随机的 32 字节十六进制字符串(因此长 64 个字符)。
- Alice 将链接发送给 Bob
- Bob 登录,然后使用 Bob 的身份验证 uid、组 uid、邀请 uid 和邀请令牌调用 firebase 云函数
- 云功能验证所有信息是否匹配,然后删除邀请并将 Bob 添加到有权访问 Alice 组的用户列表中
下面是 Alice 创建邀请链接后的数据库结构:
{
"groups":{
"alice_group_uid":{
"name":"Alice's Group",
"users":{
"alice_uid":true
},
"invites":{
"token_uid":{
"expiration":1632338701203,
"token":"5bb7b3f102b0a9fc66d9a447ae52590fd23eb2a150ff7568dc9ce62126d9c8dd"
}
}
}
},
"users":{
"alice_uid":{
"name":"Alice",
"groups":{
"alice_group_uid":true
}
},
"bob_uid":{
"name":"Bob"
}
}
}
它是通过以下方式生成的:
import { randomBytes } from 'crypto';
randomBytes(32, (e, buff)=>{
const token = buffer.toString('hex');
})
邀请条目 uid 是从firebase 唯一推送 id生成的
我想知道它是否足够或过度?除了生成随机字节,我还可以散列到期日期和邀请条目 uid。或者我可以只使用 firebase 唯一的推送 ID 并完全放弃随机令牌吗?还是使用令牌作为密钥?
使这个足够安全的最佳方法是什么?
解决方案
推荐阅读
- python - Python BeautifulSoup 网页抓取 Tripadvisor 查看评论
- docker - VS Code 远程容器无法获取本地颁发者证书
- reactjs - 更改上下文时如何立即更新错误值
- c++ - C++中数组指针的Malloc空间
- sparql - 如何清除 fuseki 中未使用的空间
- r - tree.cv 回归的变量重要性图
- python - 如何在python中打印变量“new_text”
- apache2 - WSL2 Apache2 反向代理仅排除子域的根
- python - 不存在频率中的 SciPy 离散余弦变换 (DCT) 功率
- java - 与在 iframe 页面中嵌入 pdf 的兼容性