2016-07-30 8 views
0

私はマルチテナントでidentityserverとasp.net IDを使用しています。アイデアは、各テナントがユーザーの詳細を持つ独自のデータベースまたは共有データベースを持つことです。Identityserver identitydbContent per tenant

認証するデータベースを決定するとき。私はログイン画面がどのテナントがログインしていると私は私のdbcontextのコンストラクタに注入し、私自身のミドルウェアを作成して表示することができますテナントacr_valueを通過

public MyDbContext(DbContextProvider contextProvider) {} 


    public DbContextProvider (IHttpContextAccessor context, IdentityServerContext ctx) 
    { //we can get the host/acr_values in here } 
identityserverを接続するためにリダイレクトするときに問題がある

/tokenまたはuserinfo - クライアントを識別するためのものはなくなりました。redirect_uriやテナントは必要ありません。これは、必要な接続文字列を生成できないことを意味します。

私は可能なことを考えていますか?

答えて

0

これにちょうど2セントです。別のユーザーのDBを使用しないでください。私は個人的にこのようなマルチテナントアプリケーションを作っていません。各ユーザーがその列の1つにデータベース名を持つ共通のユーザーデータベースを作成する必要があります。ログインに成功すると、ユーザーはデータベースに接続されます。

このアプローチを使用すると、アプリケーションは公開されたアプリケーションとして動作し、ユーザーは誰でも自分自身を登録して登録することができます。共通のユーザーDBを持っているので、ユーザーがサインオンしたときにいくつかの検証を実行し、そのユーザーまたは会社に対して新しいデータベースを生成するだけです。

すべてのユーザーを完全に制御できます。特定のユーザーに対して何らかのアクションを実行する場合は、この方法で簡単に実行できます。データベースを標準化してデータの冗長性を減らすと考えることができます。同様に、共通のユーザーDBを作成し、各ユーザーにデータベースを指定する列があると、より柔軟なものになります。

+0

これは元々私が達成しようとしていたものでしたが、一部のクライアントはデータを他のユーザーと区別することに非常に特化しています。つまり、共有データベースにユーザーデータを入れることができなくなります。 – kiwijus

+0

クライアントは、ログインユーザー名とパスワードハッシュを別々にする必要がありますか? –

2

私は問題を解決するためにDIを使用しません。

ユーザサービスでは、acr値を使用して、どのユーザDBに移動するかを決定します。はるかに簡単で、魔法は少ない。