2016-04-04 11 views
1

メンバーシップ/認証にAsp.Net Identityを使用するマルチテナントWeb /モバイルアプリケーションがあります。ユーザーはアンドロイドアプリ経由で、またはウェブインターフェース経由で直接アプリを使用できます。彼らはアプリケーションを使用するために登録する必要があります。マルチテナントアプリのアイデンティティは、電子メールまたはユーザー名の複製を許可します。

問題は、複数のテナントで同時に登録することはできない電子メール/ユーザー名/電話番号が1つのユーザーです。たとえば、テナントが会計専念であり、別のテナントがメッセージング専用であるとします。ユーザーは、両方とも1つの固有の電子メール/ユーザー名/電話で登録したいと考えています。しかし、Identityは、電子メール/ユーザー名/電話の複製を自然に許可していません。

私は、IdentityUserエンティティにAppIdを導入しました。したがって、どのユーザーがどのアプリケーションに属しているのかは明らかです。回避策はAppIdを使用することです。たとえば、usernameの前にAppIdを付けると、一意になります。

このシナリオに適したデザインはありますか?

+0

のインスタンスを取るUserManager.UserValidatorに差し込みます。 – trailmax

+0

@trailmaxそれは良い点ですが、クライアントは、これらのアプリケーションが同じデータベースでホストされていることを誰も知らないオプションが必要です。 –

答えて

0

ユーザーアカウントに対して独自の検証ルールを実装する場合は、独自のIIdentityValidator<TUser>を実装する必要があります。おそらく最も簡単な方法は、フレームワークのUserValidator<TUser>クラス(see source here)から継承し、クラスの関連部分をオーバーライドすることです。これは、テナント内でユーザー名/電子メールの一意性を追加したいが、異なるテナント間で同じ電子メールを使用できるようにする場合に便利です。

そして、あなたはあなたの実装を持っていたら、私は、むしろ複数のアカウントを追加するよりも、考えるだけで、単一のアカウントを持っており、彼らはへのアクセス権を持っているものテナントにクレームを追加IIdentityValidator<TUser>