允许重复电子邮件或用户名的多租户应用程序身份

Identity for multi-tenant app allowing duplicatie email or username

我有一个多租户 web/mobile 应用程序,它的 membership/authentication 使用 Asp.Net Identity。用户可以通过 android 应用程序或直接通过网络界面使用该应用程序。他们必须注册才能使用该应用程序。

问题是一个 email/username/phone 号码的用户不能同时注册多个租户。例如,假设一个租户专用于会计,而另一个租户专用于消息传递。一个用户想用一个唯一的 email/username/phone 在他们两个中注册。但是Identity自然不允许重复email/username/phone。

我在 IdentityUser 实体中引入了一个 AppId。所以很明显什么用户属于什么应用程序。解决方法是使用 AppId。例如在 username 前面附加 AppId 以使其唯一。

这个场景有什么好的设计吗?

如果您想为用户帐户实施自己的验证规则,则必须实施自己的 IIdentityValidator<TUser>。可能最简单的方法是继承框架的 UserValidator<TUser> class (see source here) 并覆盖 class 的相关部分。如果您想在租户中添加 username/email 唯一性,但允许不同租户使用相同的电子邮件,这将很有用。

一旦你有了你的实现,你就把它插入到 UserManager.UserValidator 中,它采用 IIdentityValidator<TUser>

的一个实例