首页 > 解决方案 > 多租户集中认证服务器

问题描述

我正在尝试为多个 Django 应用程序(API)创建一个集中式身份验证服务器。我看过帖子/建议,但没有一个完全符合我的要求。

概述:

问题/不确定性:

问:身份验证令牌应该在身份验证服务器上创建还是在每个项目上创建?即)每个用户对所有项目都有一个身份验证令牌,还是每个项目都有一个身份验证令牌?

问:角色将存储在每个应用程序中。我想将角色与 JWT 中的身份验证令牌一起发送。这些数据是否应该冗余存储在身份验证服务器上?另一种方法是让身份验证服务器访问项目数据库。处理这个问题的最佳方法是什么?对于每个项目,用户将具有不同的角色。

问:身份验证服务器将包含基本用户信息(电子邮件/用户名、密码、名字/姓氏等)。由于数据库之间不能使用外键,我可以使用基于用户名的用户代理在每个项目上创建用户。应用服务器是否需要访问哪些身份验证令牌是有效的?

利用预先存在的软件:

标签: djangodjango-rest-frameworkmulti-tenantdjango-authentication

解决方案


您的问题似乎是多重的,所以我也会拆分答案:

关于用户

由于您的用户不是您的“mutitencancy 模型”的一部分,因此您有两个选择:

  1. 在不同的租户数据库之间复制您的用户数据(通过触发器等等)。
  2. 编写您自己的身份验证中间件,以验证正确数据库中的用户(从现在起我们将其称为根数据库)。您可以使用来自根数据库的用户 ID 并手动验证它们是否匹配,这是一个坏主意。

这意味着您的数据库架构将是这样的:

 root database (all common data here)
 project 1 database (with it's own user data or referencing root)
 project 2 database (with it's own user data or referencing root)

现在用于身份验证令牌

您有与上述相同的选项:

  1. 将它们保存在根数据库中并编写您自己的中间件。
  2. 复制它们。

如何实现整个事情

由于您的用例非常特殊,您可能会遇到来自现有软件的一些阻力。但是创建自己的多租户解决方案并不


推荐阅读