web-dev-qa-db-ja.com

ASP.NETIdentityを使用してマルチテナントユーザーログインを実装する方法

マルチテナントソリューションを開発していて、最新の ASP.NET Identity フレームワーク、具体的には Entity Framework 実装を使用したいと考えています。

基本的に、2人のユーザーが同じユーザー名を持つことを許可する必要がありますが、テナント内で一意である必要がありますが、Twitter、Microsoft、Facebook、Googleなどの外部サインインも利用したいと思います。

私の知る限り、フレームワークはマルチテナンシーを念頭に置いて設計されていませんが、拡張性は許容されているようです。できるだけ多くの既存のコンポーネントを利用したいと思いますが、現時点では Entity Framework 実装を放棄し、すべて自分でコーディングする必要があると思います。

他の誰かがこれを試しましたか、そして彼らはどれだけ彼ら自身をコーディングしなければなりませんでしたか。

25
James Skimming

これで、GitHubリポジトリで共有した実用的なソリューションができました。

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

マルチテナンシーをサポートするために必要な拡張性は、 Microsoft.AspNet.Identity.EntityFramework の1.0.0リリースでは不可能ですが(少なくとも多くのカスタム作業がなければ)、1.1では利用可能です。現在、アルファリリースは Nightly ASP.NET Web Stack NuGetパッケージ から入手できます。

NuGetパッケージとして作成したものをリリースすることにしました AspNet.Identity.EntityFramework.Multitenant 、現在必要なのは Nightly ASP.NET Web Stack NuGetパッケージ =。

パッケージを利用してマルチテナンシーを可能にする2つの簡単なサイトを提供しました。

  1. Vanilla Implementation これは文字列の主キーを使用する標準のMVC5テンプレートプロジェクトです。
    • マルチテナンシーを提供するために必要な変更は、これに分離されています commit
  2. 整数主キーの実装 整数主キーを使用するためにさらにいくつかのカスタマイズを行っています
    • マルチテナンシーを提供するために必要な変更は、これに分離されています commit

ASP.NET Identityの1.1バージョンがリリースされたら、ソリューションを更新する予定です。

私がリリースしたnugetパッケージで他の人が使用できることを願っています。フィードバックは大歓迎です。 見つけた問題を提起してください


更新

ソリューションは、 Microsoft.AspNet.Identity.EntityFramework の2.0リリースを使用するように更新されました。

27
James Skimming

ええ、私たちはこれを拡張性のシナリオとして明示的に残しました。これは、UserManagerプロパティをオーバーライドし、独自のカスタムIUserStoreを実装することで実行できるはずです。 EF UserStoreを拡張して、tenantIdをユーザーに追加することもできるかもしれませんが。

3
Hao Kung