2016-07-30 47 views
0

我正在尋找使用身份服務器和多租戶的asp.net身份。這個想法是,每個租戶將擁有自己的數據庫或共享數據庫與用戶的詳細信息。Identityserver identitydb每個房客的上下文

決定應對哪個數據庫標識服務器進行身份驗證時。我穿過租戶acr_value允許登錄界面顯示的租戶正在登錄,我已經創建了自己的中間件注入到構造爲我的DbContext

public MyDbContext(DbContextProvider contextProvider) {} 


    public DbContextProvider (IHttpContextAccessor context, IdentityServerContext ctx) 
    { //we can get the host/acr_values in here } 

問題是,當identityserver重定向連接/令牌或用戶信息 - 再也無法識別客戶端了,沒有redirect_uri或租戶,這意味着我無法生成我需要的連接字符串。

是我在想什麼?

回答

0

就我這2分錢。不要使用不同的用戶數據庫。我個人不會這樣做多租戶應用程序。您應該爲每個用戶在其某個列中具有其數據庫名稱的情況建立一個通用用戶數據庫。成功登錄後,只需將用戶連接到他們的數據庫。

使用這種方法,您的應用程序可以表現爲公共應用程序,任何用戶都可以自行註冊。因爲,你有一個普通的用戶數據庫,你需要做的就是在用戶註冊時運行一些驗證,並針對該用戶或公司生成一個新的數據庫。

您將完全控制所有用戶。如果您想對特定用戶執行任何操作,則可以使用此方法輕鬆完成此操作。您可以將它想象爲我們規範化數據庫以減少數據冗餘。同樣,通過製作一個通用的用戶數據庫,每個用戶都有一個列來指定他的數據庫,這使得它更加靈活。

+0

這原本是我計劃實現它的原因 - 然而,有些客戶非常關心將他們的數據與其他用戶分開,這意味着我無法將用戶數據存儲在共享數據庫中 – kiwijus

+0

您的客戶甚至想要分開他們的登錄用戶名和密碼哈希值是分開的? –

2

我不會用DI來解決問題。

在用戶服務中,使用acr值來確定要去哪個用戶DB。更容易 - 而且不那麼神奇。