3

我是新來的MVC,目前與MVC6(EF7,對identity3,VS2015)工作...MVC6對identity3 - 如何建立普通用戶帳戶多的WebApp

我想創建兩個不同的/獨立的WebApp一個公司域(在不同的子域中)。

我想爲這兩個應用程序使用通用/共享身份/登錄系統 - 換句話說,我將允許用戶在兩​​個應用程序中都擁有一個帳戶。

我沒有域認證選項(公司不使用域 - 我知道這很奇怪),所以我必須?使用個人用戶帳戶...

跨多個應用程序創建和使用普通用戶帳戶的最佳方式/實踐是什麼?

在首先我想到了在這兩個應用程序創建兩個不同的DbContext:一個標識(用戶DB)和第二對應用系統相關的DB ...

這種做法會給我三種不同的數據庫:

  • IdentityDb - 共同爲雙方的WebApp,
  • App1Db
  • App2Db

但是我懷疑這是不錯的做法和最好的方法?

可能會有足夠的DBContext與適當的配置,但我不知道我應該從哪裏開始。

我已閱讀關於SSO(單點登錄) - 但據我瞭解這是關於身份驗證過程,所以稍後 - 所以我不確定這個方向。

無論如何找不到示例如何跨多個應用程序創建通用用戶帳戶/配置文件。


UPDATE:

我原來的問題可能是太開放了...我想只有一個要求,不是「做什麼」,但也「如何在MVC6做」 ......

所以我的另一個問題是:我如何在MVC6中實現這一點?我必須做什麼?也許有些例子?

如果我決定一個單獨的用戶數據庫 - 那麼從應用程序的角度來看,我將有兩個數據庫?在代碼中如何處理這個問題?我應該創建兩個單獨的DBContext - 或者只有一個?

而且我已經所以這裏讀幾點意見,只使用一個的DbContext是更好,更簡單的選擇......

反正我有嘗試昨天2X的DbContext工作 - 當我創建IdentityDbContext新的控制器一切正常,但我嘗試創建任何控制器的第二個DBContext(不與身份關聯)時出錯...

(我已經把描述這個錯誤對新問題:MVC6 Working with two DBContexts and error when create new controller


預先感謝任何建議:)

回答

1

如果回答你的問題有三個數據庫是最好的方式,是: 這取決於。

無論這個問題的答案是否是一個好的做法是無關緊要的。

讓我詳細說明。

每個具有專用數據庫的應用程序的概念源於舊式思維。大型企業架構由各種持久性存儲組成,每個持久存儲都選擇做它最擅長的事情。所以它與良好的做法無關。您應該將數據存儲在最適合的位置。看看域驅動設計和有界上下文特別是爲了更好地理解我在說什麼。

所以,如果你需要三個數據庫的問題,如果在你的特殊情況下這是最好的選擇,那麼這就是你應該做的。爲了完成這個答案,我將描述我們的情況。我們有一個老用戶數據庫,其中有用戶。我們無法擺脫它,直到所有的網絡應用程序已被淘汰。儘量減少對客戶的影響。因此,對於我們的新Web應用程序,我們只爲用戶使用這個舊數據庫,並使用Azure存儲來存儲我們需要存儲的所有內容。換句話說,從概念上講,我們的情況就像你所描述的那樣。爲所有其他Web應用程序使用的用戶提供獨立的存儲空間。

聽起來像是一個很好的解決方案給你的問題?

更新 對於MVC6,Identity Server 3具體。 ID服務器3能夠使用自定義用戶服務,允許您連接任何您想要的用戶存儲。以下是詳細信息:https://identityserver.github.io/Documentation/docs/advanced/userService.html。這正是我們所做的。

至於你的其他問題;我們會將用戶放在Azure表存儲中,並在所有舊應用程序都不存在時通過IdentityServer4從中檢索。現在,遺留的MySQL數據庫中沒有任何東西留給我們,但是我們有用戶。但有一些舊的應用程序仍在使用它,所以...

這是否回答您的問題?

+0

謝謝你的回答:)讓我問一下......那又怎麼樣?當您將所有網絡應用程序逐步淘汰時,您計劃的是什麼?你仍然有單獨的數據庫用戶,或者你打算改變這個? –

+0

您的意見是有幫助的(它給了我一些觀點),但仍然不回答我的問題,在MVC中完全是這樣嗎? (但這是我的錯 - 我問了錯誤的問題。) –

+0

我已經更新了我原來的問題。 –

1

在以前版本的ASP.NET身份( 2)在子域之間共享身份cookie是缺點。我不知道第四版,但你可以測試一下:

改變身份配置在ConfigureStartup類的方法:

services.AddIdentity<ApplicationUser, IdentityRole>(config => 
    { 
     config.Cookies.ApplicationCookie.CookieDomain = ".domain.com"; 
    }) 
    .AddEntityFrameworkStores<ApplicationDbContext>() 
    .AddDefaultTokenProviders(); 
+0

謝謝你的回答。然而這不是解決方案在我的情況(?)。 共享cookie將成爲解決方案的一部分,但稍後會有更多, –

+0

共享cookie允許我交換認證數據,並在認證過程中(以及之後)使用。 我的問題早一點 - 如何(在哪裏)使用身份創建通用(僅一個)用戶數據庫...換句話說,我希望將所有關於用戶的信息存儲在一個地方(只有一次,避免重複)應用。 –

+2

最簡單的解決方案是共享'identity db'。 –

相關問題