2010-09-07 79 views
1

我修改了ASP.NET登錄控件以允許指定UserRole('Employee'或'Volunteer')。用戶通過調用我們的客戶寫的web服務進行驗證,該服務接受用戶名/密碼/角色並返回true或false。按角色扮演ASP.NET模擬

  • 如果角色是'員工',它表示活動目錄用戶。應用程序應該使用給定的用戶名/密碼來模擬用戶。
  • 如果角色是'志願者',應用程序應該在預先知道其用戶名/密碼(即在web.config文件中硬編碼)的設置Windows帳戶下運行。

服務器在Windows Server 2003上運行。我對無數的配置選擇感到困惑,並試圖理解我的選擇;

是否有可能具有多個場景描述?

我應該以編程的方式指定模擬還是可以通過配置文件完成?如果是這樣,是否需要使用LogonUser或WindowsIdentity?

應該使用什麼配置文件設置? (即Forms認證,impersonate = true等)。

預先感謝您。

回答

3

因爲關於要模擬的身份是基於運行時數據的決定,您可能必須以編程方式處理模擬。

我使用interop和WindowsIdentity的組合來處理模擬。我遵循的步驟如下:使用互操作LogonUserA(),填補一個句柄一個IntPtr(token

  1. 日誌。
  2. 複製代碼與互操作DuplicateToken()
  3. 創建一個新窗口標識,la:var identity = new WindowsIdentity(tokenDuplicate);
  4. 創建通過模擬上下文:與互操作var context = identity.Impersonate();
  5. 關閉兩個標記CloseHandle()
  6. 完成後冒充,取消通過模擬環境:context.Undo();

我把一次性類各地的處理細節。步驟1-5出現在構造函數中,第6步出現在dispose例程中。這有助於確保即使面臨例外情況,我也能妥善恢復。

使用此方法,由於您通過服務方法傳遞憑據,因此web.config身份驗證方案並未完全強制。但是,如果您使用的是集成的Windows身份驗證,則可以通過編程方式從HttpContext.Current.User.Identity.Impersonate()中模擬當前用戶,而無需在服務方法中傳遞憑據。

另外,您可能已經知道,PInvoke.net是配置互操作方法簽名的寶貴資源。

相關問題