2009-09-10 82 views
6

我爲我的asp.net mvc 1.0 web應用程序構建了一個自定義登錄系統,因爲我爲每個用戶存儲了大量用戶數據(我決定不嘗試爲窗口添加自定義表鑑於此)。登錄系統基本上使用SQL Server(2005或2008)以及我自己的數據庫和非常標準的表結構。用戶表與唯一的ID,用戶名和散列密碼鏈接到我的其他用戶相關數據表。使用ASP.NET MVC進行Windows身份驗證

我的問題是,我怎樣才能使我的系統使用Windows身份驗證登錄。我想允許管理員爲用戶(在我的系統中定義)選擇一個Windows身份驗證登錄名,並可能爲我的自定義表中的某些內容添加一個值,以供我對其進行身份驗證?

這個問題可能是錯誤的,我可能誤解了Windows身份驗證的工作原理,但我想在我的Web應用程序中提供該選項。

+0

我不知道確切的答案,但我認爲要使用Windows身份驗證您需要設置活動目錄,併爲您的網絡上的每個人都有一個用戶。然後,我認爲你需要使用web.config模擬asp.net用戶,你應該很好去。 – rball 2009-09-10 15:42:12

回答

8

如果您在您的網站啓用了Windows身份驗證,那麼你應該能夠使用User.Identity.Name得到他們NT/Active Directory中當前登錄用戶的用戶名,並將其與用戶表中的列進行匹配。

+0

因此,在我的actionfilter HttpContext.Current.User.Identity.Name中使用我可以訪問我的用戶名(MACHINE \ PHIL)並設置了IsAuthenticated。所以我需要做的就是添加另一列到我的用戶表中以將我的用戶名與User.IDentity.Name關聯,並檢查它們是否已通過身份驗證? – Phil 2009-09-10 16:02:55

+1

如果User.Identity.Name返回一個值,則它們經過身份驗證。更重要的是,他們不應該能夠訪問該頁面,除非他們通過身份驗證(IIS將強制他們在呈現頁面之前進行身份驗證)。 – Scrappydog 2009-09-10 16:16:10

1

如果我正確理解你的問題,你想添加一些其他數據鏈接到Windows Authenticated用戶名?

如果是這樣,您需要將用戶名和此自定義信息存儲在新表中。 Windows身份驗證數據存在於Active Directory中,因此您可以在那裏查看用戶列表。當Windows驗證用戶身份時,您不會自動將任何自定義信息添加到AD中。如果您需要任何自定義信息,您需要爲AD添加自定義查找,或者根據您決定存儲信息的位置在數據庫中查找自定義數據。

幾乎所有的Windows身份驗證都是用戶的用戶名和能夠檢查與該用戶關聯的角色(AD組)。除此之外,您將需要手動編碼。

我最近問到如何在MVC中內置安全性之外實現定製,並且自己提出了一個解決方案。也許有一些花絮,可以幫助你回答你的問題:

How to implement authorization checks in ASP.NET MVC based on Session data?

+0

有用的評論,一些不錯的背景閱讀和其他想法。 – Phil 2009-09-10 16:04:50

8

下面是我們如何做了它的混合形式/ Windows身份驗證的應用程序: -

public class MyBaseController 
{ 
    protected override void OnAuthorization(AuthorizationContext authContext) 
    { 
    if 
    (
     !User.Identity.IsAuthenticated && 
     Request.LogonUserIdentity != null && 
     Request.LogonUserIdentity.IsAuthenticated 
    ) 
    { 
     String logonUserIdentity = Request.LogonUserIdentity.Name; 
     if (!String.IsNullOrEmpty(logonUserIdentity)) 
     { 
     User loginUser = 
      Context.Users.FirstOrDefault(
      x => x.UserIdentity == logonUserIdentity); 
     if (loginUser != null) 
      FormsAuthentication.SetAuthCookie(
      loginUser.LoginName,createPersistentCookie); 
    } 
    } 

有一些封裝,我已經取出來緊湊的緣故。

+0

感謝您的有用代碼片段! :) – Phil 2009-09-10 16:04:15

+0

伊恩,你會介意張貼更多的代碼?我有興趣正確地封裝這個功能以及你如何配置IIS(我自己使用IIS 7)。 謝謝。 – wgpubs 2009-09-14 18:32:29