有人能幫我理解'假冒'的概念嗎?幫助理解假冒
我理解的方式是,當發生模擬時,代碼將代表某個身份執行。
因此,對於網頁,只要禁用模擬,網頁將始終在其配置的帳戶下運行。
如果已啓用,我可以「覆蓋」其默認帳戶並設置我希望Web應用程序運行的帳戶。
因此,如果我使用IIS7,並且我有以下內容:
- 標識設置爲自定義帳戶「user1」的應用程序池。
- 一個asp.net網站,其應用程序池設置爲上面的一個,禁用模擬。
- 啓用Windows身份驗證。
我也有以下代碼:
的IIdentity II = Thread.CurrentPrincipal.Identity;
IIdentity iii = Page.User.Identity;
如果我訪問該頁面,我被要求提供Windows憑據,我介紹'user2'憑證。
由於禁用模擬功能,我認爲IIdentity名稱是'user1',它不是'user2'。
有人能幫我理解發生了什麼嗎?我想我完全誤解了「模仿」的概念。
感謝
更新1
我碰到這個鏈接來尋找了一段時間後: http://msdn.microsoft.com/en-us/library/aa302377.aspx
好像有三個IIdentity的對象。
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
的WindowsIdentity I2 = WindowsIdentity.GetCurrent();
從鏈接我的理解是:
HttpContext.Current.User.Identity:表示請求的頁面當前用戶。
Thread.CurrentPrincipal.Identity:當前正在執行該線程的標識。我猜這個身份將是當前Web請求運行的標識,並且它的asp.net角色將定義用戶在應用程序中可以做什麼和不可以做什麼。
我想大多數時候HttpContext.Current.User.Identity和Thread.CurrentPrincipal.Identity都是同一個用戶,但對於某些場景,我猜請求頁面的用戶和Thread.CurrentPrincipal.Identity可能是不同。
然後是: WindowsIdentity i2 = WindowsIdentity。GetCurrent();
鏈接說:「的WindowsIdentity = WindowsIdentity.GetCurrent(),它返回當前執行的Win32線程的安全上下文的身份。」
做了幾個測試,實現了一個禁止「模仿」之後和我目前的情況是,我發現這是得到模擬的身份。
如果我不模仿,'WindowsIdentity.GetCurrent();'將反映應用程序池中配置的用戶,如果我模擬,身份更改爲我在web.config中設置的身份:
<identity impersonate="true" password="**" userName="****" />
更新2
如果我設置的web.config爲: <identity impersonate="true" />
WindowsIdentity.GetCurrent()被模擬的作爲用戶作出這樣的請求:
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
WindowsIdentity.GetCurrent()
在同一個用戶,用戶請求頁面。
感謝您的答覆和文章!..這是混淆了我......「當使用模擬,ASP.NET應用程序可以選擇與他們的客戶的身份執行代表他們正在操作「,所以如果我不使用'模擬'我猜應用程序應該繼續使用網站配置帳戶執行? (在IIS7中,內置帳戶或自定義帳戶之一)...在我上面的情況下,如果我不使用模擬,爲什麼顯示'user2'的身份名稱我認爲它應該仍然是' user1',.. – rauland 2011-04-09 15:03:22
如果您未使用模擬,那麼它不會使用IIS內置帳戶或自定義帳戶之一。 – 2011-04-09 18:07:10