如何使用ASP.NET标识实现多租户用户登录

时间:2013-11-17 22:38:38

标签: multi-tenant entity-framework-6 asp.net-identity

我正在开发一个多租户解决方案,我想使用最新的ASP.NET Identity框架,特别是Entity Framework实现。

基本上我需要允许两个用户拥有相同的用户名,虽然它在租户中必须是唯一的,我也想利用外部登录,如Twitter,微软,Facebook和谷歌。

据我所知,该框架并未考虑多租户设计,尽管它似乎确实允许扩展性。我宁愿尽可能多地使用现有组件,但目前我认为我将不得不放弃Entity Framework实现,并自己编写代码。

是否还有其他人尝试过此操作以及他们必须自行编码多少。

2 个答案:

答案 0 :(得分:27)

我现在有一个工作解决方案,我在GitHub存储库中共享:

https://github.com/JSkimming/AspNet.Identity.EntityFramework.Multitenant

Microsoft.AspNet.Identity.EntityFramework的1.0.0版本无法实现支持多租户所需的可扩展性(至少没有大量的自定义工作),但是目前可通过Nightly ASP.NET Web Stack NuGet Packages

我决定发布我作为NuGet包AspNet.Identity.EntityFramework.Multitenant生成的内容,如上所述,目前需要Nightly ASP.NET Web Stack NuGet Packages

我提供了两个简单的网站,使用这个包来实现多租户:

  1. Vanilla Implementation这是使用字符串主键的标准MVC5模板项目。
    • 提供多租户所需的更改已被隔离到此commit
  2. Integer Primary Key Implementation正在进行一些定制以使用整数主键
    • 提供多租户所需的更改已被隔离到此commit
  3. 我计划在发布1.1版本的ASP.NET身份时更新解决方案。

    我希望其他人在我发布的nuget包中找到一些用处,任何反馈都非常受欢迎,请raise any issues you find


    更新

    该解决方案现已更新为使用Microsoft.AspNet.Identity.EntityFramework的2.0版本。

答案 1 :(得分:3)

是的,我们明确将此视为可扩展性方案。您应该可以通过覆盖UserManager属性并实现自己的自定义IUserStore来实现此目的。虽然您可能也可以扩展EF UserStore,只需向用户添加tenantId。