2

開箱即用MVC3應用程序允許使用Intranet項目模板時的Windows身份驗證或Internet項目模板的表單身份驗證。我有一個我想使用的網站。另外,我有一個現有的網站,它使用自己的自定義類型的認證來驗證用戶(沒有授權或角色,只是標識)。除了遺留系統的數據以進行身份​​驗證之外,我可能還需要使用每個功能。由於這個原因,我試圖確定一種方法來抽象我的身份驗證並將其解耦。我想使用某種依賴注入,完全基於配置,所以我可以在兩個不同的位置部署相同的站點,並通過僅更改配置來切換身份驗證模型(Windows身份驗證/表單身份驗證/自定義身份驗證)。MVC3鬆耦合認證

目前,我所使用的所有ASP.NET應用程序(包括MVC3模板項目)似乎都與所使用的身份驗證類型緊密耦合。

我在這個盒子外面想的太過分了嗎?

這是可能的,還是有這種緊密耦合的原因?

UPDATE 真正的問題我已經是現有的傳統認證,我需要使用一些用戶,對窗體身份驗證,我需要爲他人之間。 Windows與表單身份驗證不是真正的問題,因爲LogIn表單沒有用於其中一個。但請考慮自定義身份驗證和表單身份驗證。 LogIn表單與FormsAuthentication,更具體地說是System.Web.Security緊密結合。 (即Membership.ValidateUser,FormsAuthentication.SetAuthCookie等)。

我想注入到我的AccountController中使用的身份驗證,而不是使用FormsAuthentication和Membership。

到目前爲止,這是否更有意義我的問題是什麼?

回答

1

它們實際上並不緊密結合。模板只是爲了讓你快速啓動並運行。

ASP.NET成員身份支持表單和域身份驗證。

在配置窗體身份驗證網站,例如,你會看到一行在Web.config這樣的:

<authentication mode="Forms"> 

您可以更改到:

<authentication mode="Windows"> 

這不是唯一的區別(與Windows認證,例如,你不需要需要登錄頁面),但它是最重要的。您根據ASP.NET Membership API編寫代碼,並且只在必要時才特別針對Forms身份驗證。

+0

當網站在本地使用時,我會進行Windows身份驗證,但這些用戶在不在網絡上時可能需要訪問網站。在這種情況下,他們需要使用表單身份驗證登錄。然而,客戶需要登錄,但會使用預先存在的身份驗證系統,該系統不使用aspnet形式驗證表,視圖等。 – 2012-01-09 15:38:55

1

我同意克雷格的答案。我唯一需要補充的是,我認爲你可以在web.config中改變任何東西來鬆散耦合。原因是,當您爲您的MVC應用程序創建部署包時,您可以應用web.config transforms

我們使用Unity for DI/IoC,並且您還可以使用Unity在web.config中指定注入依賴關係。您只需編寫Web.Auth1.config以配置您的應用程序以進行一種身份驗證,然後使用Web.Auth2.config將其配置爲另一種身份驗證。然後,當您部署時,您只需選擇目標,VS爲您構建正確的配置。

如果您的源代碼需要知道部署中使用的是哪種類型的身份驗證,則可以使用web.config appSetting來告訴它,它也可以在部署過程中使用web.config轉換進行更改。