0

我有以下場景,我正在計劃使用Windows身份驗證。關於Windows模擬的建議,但更改爲其他用戶

1.1)我有一個web服務器,它將在域中運行。
1.2)該網站將在具有一組配置的權限(允許訪問文件系統,SQL服務器數據庫等)的域用戶的憑據下運行。
1.3)訪問該網站的用戶將屬於同一個域,所以我打算使用Windows身份驗證。

所以在這一點上,一個經過身份驗證的用戶,將訪問該網站,但我想從代碼中,「CurrentUser」將是該網站正在運行的網站。

我想要以下內容。

2.1)使用Windows身份驗證來驗證訪問該站點的用戶。 (域控制器將負責這個)。
2.2)讓站點在步驟1.2中配置的用戶下運行。所以它將擁有它的所有權限。
2.3)但我想知道初始用戶用來驗證(步驟2.1)。

這樣我可以做到以下幾點:

3.1)用戶「A」決定訪問該網站,因爲他是屬於同一個域作爲Web服務器,他成功地驗證。
3.2)從代碼中我發現「A」已通過驗證,所以我會去取他的角色。 「角色1,角色2,角色3」。
3.3)然後,我希望代碼在步驟1.2中配置的用戶下運行,但是我將爲委託人分配從3.2檢索到的所有角色。

我以爲也許我可以使用模擬爲此。

4.1)所以用戶「A」決定訪問該網站並進行身份驗證。
4.2)該網站最初將以「A」憑證運行,因此「CurrentUser」將爲「A」。
4.3)將用戶(以某種方式)切換回1.2
4.4)我可以檢索4.1配置的所有角色。
4.5)爲當前主體分配從4.4中檢索到的角色。

因此,最終網站將使用Windows身份驗證與模擬,但從代碼我會切換回用戶1.2。

如果你已經達到了這一點,謝謝閱讀!我想知道這是否可行,是否可以實現,或者我是否過於複雜。

此外我還建議如何插入以及在何處執行所有角色檢索和用戶切換。
非常感謝!

更新1

@代碼Jammr,你是對的,沒有必要做任何瘋狂的事情。但我認爲我仍然需要看看HttpModules,..

經過一些測試,搜索等...

我已經開始瞭解這些IIdentity的對象之間的差異:

HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
的WindowsIdentity I2 = WindowsIdentity.GetCurrent();

我張貼另一個問題,幫助我理解他們: Help understanding impersonation

我覺得這回答我的問題。

回答

1

有幾個代碼樣本用於模仿。大多數涉及處理令牌和Win API調用。但是如果你真的必須這樣做,我說這不知道你的網絡服務器類型是什麼。 IIS 6或IIS7,那麼有很多代碼示例可以引導您一起使用。

這裏是一個亞洲的鏈接,幾乎給你一個出發點。 http://msdn.microsoft.com/en-us/library/aa331755(v=vs.71).aspx

這是AD認證的鏈接,你可能不必做任何瘋狂的事情。 http://support.microsoft.com/kb/326340

你可能想看看asp.net模擬,應用程序池設置等等,看看是否有更好的方法。