将用户UID发送到firebase云功能是否安全



我有一个firestore集合,每个用户都有一个文档。文档名称等于用户UID。

我写信给这些文件时有一个防火区的功能。因此,我将用户UID传递给这个firebase云函数,这样该函数就可以写入数据库(这只是一个非常简单的写入,所以我不会在这里显示它(。

这是我的js文件中的函数调用:

const saveAllTimeData = firebase.functions().httpsCallable('saveAllTimeData');
saveAllTimeData({ data: firebase.auth().currentUser.uid })

但我不太确定这是否安全。

难道不能在执行之前就让人更改firebase.auth().currentUser.uid部分吗?f.e.输入另一个uid来更改他不应该更改的文档?

用户的UID可以安全共享,因为UID的作用就像指纹一样,可以区分和识别用户。这些不会以任何方式授予用户权限或权力,它只是一组随机的唯一字符。

使用Admin SDK,您还可以根据设计创建这些UID,允许您拥有一个自定义UID,如果需要,该UID可以代表他们的用户名。

由于您还使用了httpsCallable云函数,因此它包括一个名为context的值,该值使用auth模块中的JWT令牌。JWT令牌对用户是可解码的,并且不应该被共享。然而,httpsCallable方法通过HTTPS隧道对其进行保护,使其免受大多数劫持。

在您的函数中,您应该注意到上下文变量

exports.addMessage = functions.https.onCall((data, context) => {
// ...
});

对于onCall,上下文包含一个名为auth的属性,其中包含解码的JWT值

// Message text passed from the client.
const text = data.text;
// Authentication / user information is automatically added to the request.
const uid = context.auth.uid;
const name = context.auth.token.name || null;
const picture = context.auth.token.picture || null;
const email = context.auth.token.email || null;

参考

  • https://firebase.google.com/docs/reference/functions/providers_https_#oncall
  • https://firebase.google.com/docs/reference/functions/providers_https_.callablecontext
  • https://firebase.google.com/docs/auth/admin/verify-id-tokens

相关内容

  • 没有找到相关文章

最新更新