首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多租户集中认证服务器

多租户集中认证服务器
EN

Stack Overflow用户
提问于 2018-09-29 05:21:38
回答 1查看 620关注 0票数 1

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

概述:

  • 用户可以关联到一个或多个项目
  • 用户对他们关联到的所有项目具有相同的凭据
  • 使用JSON Web Tokens -使用有效负载添加用户数据、要路由到的子域(项目)、角色,将不使用role登录。所有用户将登录到相同的网站,并将被路由到他们关联的项目(或给定的列表,如果有多个)。单点登录是可选的。

Questions/uncertainties:

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

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

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

利用现有软件的

我想到的另一种方法是使用django-

  • - schemas,它利用Postgres模式,其中我的每个项目都是一个模式(目前使用的是MYSQL数据库)。利用这一点有意义吗?

  • 我是否可以利用IdP服务来卸载一些身份验证?这很容易绑定到Django auth层吗?
EN

回答 1

Stack Overflow用户

发布于 2018-09-29 05:41:42

你的问题似乎是多重的,所以我也会分成两部分回答:

关于用户的

因为你的用户不是你的“多面性模型”的一部分,所以你有两个选择:

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

这意味着您的数据库模式将如下所示:

代码语言:javascript
复制
 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)

现在用于身份验证令牌

您可以选择与上面相同的选项:

将它们保存在根数据库中,并编写您自己的middleware.

  • Replicate

如何实现整件事

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52562796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档