ASP.NET ” Identity impersonation “ 與IIS 關係
(譯自:http://appetere.com/post/introduction-to-identity-impersonation-with-iis-and-aspnet )
目前手邊有一個WEBAPI專案,在Client端請求至API時希望吃到原來SERVER 的登入驗證,然後同事給了一串CODE….如下,請我放在Web.Config中
<identity impersonate=”true” userName=”Account” password=”Password” />說實在話我看了很久真的不知道要幹嘛?查詢了關於IDENTITY...etc之類的東西,但還是不太理解,目前最接近能理解範圍的大概是這篇,索性就自己理解的翻譯筆記一下,若有任何錯誤,懇請大力鞭叱
ASP.NET原來是透過IIS6、IIS7執行應用程式服務,預設會使用 NETWORK SERVICE ACCOUNT作為權限驗證機制,而透過impersonate則可模擬並使用指定的不同帳號進行通關驗證。
當在IIS7上使用匿名請求而不使用window驗證機制時,IIS會自動預設請求標籤,帶入預設帳號 IUSER,定義applicationHost.config內容如下:
<anonymousAuthentication enabled="true" userName="IUSR" />透過這樣的預設行為,IIS便可以放行請求至應用服務,且ASP.NET的表單驗證( Forms Authentication)機制,仍舊可以獨立的在稍後使用匿名USER身分進行。
當ASP.NET的應用服務自己依請求取用系統資源時,其權限便是來自所屬網站服務的程式集區身份識別中,而程式集區初始便預設使用NETWORK SERVICE作為身分權限的設定使用。applicationHost.config 內容如下:
<applicationPoolDefaults>
<processModel identityType="NetworkService" />
</applicationPoolDefaults>當我們想要ASP.NET的應用服務不使用NETWORK SERVICE ACCOUNT,而是另外使用不同的帳號,我們可以在ASP.NET的web.config中加入以下程式。
<system.web>
<identity impersonate="true" />
</system.web>在加入以上程式後,這個情境便會模擬 IUSER的身分。
當IIS此時使用window驗證機制而不是匿名驗證(anonymous authentication),IIS便會允許ASP.NET此使使用模擬的身分進行資源的取用;如此一來,這樣不管是誰登入都不會有因權限而無法取得資源的問題。
除此之外,不論IIS所設定的驗證模式為何,我們也可以透過在web.config中加入設定,使用有效的Windows身分作為整個應用服務請求的身分。如開頭所述CODE
[Note] IIS6與IIS7之設定大同小異,但在userName的設定上有些許的不同,需使用以下格式=>IUSR_[MachineName]


