多租户应用-如何在前端/后端之间传递数据?

问题描述 投票:0回答:1

我正在Node / Mongoose + React中构建此多租户应用程序。我决定为所有用户提供一个数据库。

我有一个名为companies的顶级集合,该集合存储公司的基本数据并具有company_id

[其他集合中的条目,例如usersinventory等,都通过此ID引用了它们所属的公司。例如,用户架构如下所示:

const UserSchema: mongoose.Schema = new mongoose.Schema({
  email: {
    type: String,
required: true,
  },
  password: { type: String, required: true, select: true },
  role: { type: String, required: true },
  company_id: { type: mongoose.Types.ObjectId }, //REFERENCE TO COMPANY
  isVerified: { type: Boolean, required: true, default: false },
});

直到这里一切都很好。现在如何正确传递company_id以确保仅检索相关数据?例如。如果用户X属于公司A,则他只能看到公司A的库存。

我想我不确定步骤4:

    1. 用户登录。

    2. 他将获得一个JWT令牌,该令牌上具有company_id信息。

    3. 此令牌将存储在前端的某个位置(我想是本地存储或cookie)
    4. 用户必须检索库存清单。由于库存是一个独特的大收藏夹,如何将company_id传递给后端?考虑到这是一个GET请求,我假设它应该作为HTTP标头传递?还是后端应该解码每个请求附带的JWT并从那里检索company_id
javascript node.js mongodb security architecture
1个回答
0
投票

您最好为所有客户选择一个数据库。

但是,多租户应用程序必须彼此隐藏您不同客户的数据。如果可能,它们应该彼此隐藏彼此在您的应用程序中的真实存在。

您必须使用每个请求验证您的JWT或其他安全令牌,并且必须从该令牌中提取用户的身份和/或company_id。与每个请求。因为网络蠕变。

您的安全性令牌应该很难被欺骗。 “硬”表示“很难像正确地猜测一个160位随机数。”

必须]]认为一个请求仅在请求中传递了用户ID或公司ID。对于看到请求的人来说应该是不可能的,例如

 https://example.com/company/123

简单尝试

 https://example.com/company/124

查看其他客户的数据。除非您想成为https://krebsonsecurity.com/上的专题文章的主题。 (您没有。)

最后,请记住,URL已记录在各种代理服务器中,您无法控制这些日志。您不应将敏感数据作为API路由的一部分或作为查询参数嵌入URL中。

© www.soinside.com 2019 - 2024. All rights reserved.