Win2008 server IIS7 設定身份模擬(ASP.NET impersonation)

NO IMAGE

作者:eaglet

轉載請註明出處

IIS7 與 IIS 6 相比有了很大的改動,原來在 IIS 6 下可以的設定到了 IIS 7 下有的會發生變化。身份模擬的配置上,IIS7 和 IIS6有很大不同,網上IIS6的身份模擬的文章比較多,但介紹IIS7的比較少,我把的一些折騰的經驗在這篇部落格中寫下來,以供參考。

IIS 7 有兩種 ASP.NET Application Mode。

一種是 整合模式(Integrated Mode) 這個是預設的模式,也是微軟推薦的模式,另一種是 經典模式(Classic Mode) ,這種模式是用於相容老版本。整合模式使用更方便而且安全性更好,不需要把模擬帳戶的使用者名稱和密碼寫在配置檔案中,這樣更安全也更方便。既然我們已經用了IIS 7,那麼我們還是按微軟推薦的方式使用整合模式比較好。

整合模式下,身份模擬可以完全通過介面來完成:

image

首先如上圖所示,IIS 7 在 Server Level 下有個 IIS-> Authentication ,雙擊這個圖示我們看到下面這個圖:

 

image

 

在這個圖中我們看到 IIS7 多了一個 ASP.NET Impersonation 的功能,在 Actions 裡面點 Enable 開啟身份模擬功能,然後點 Edit 編輯身份模擬。

image 

我們看到上面這個編輯框,在這個編輯框中,我們指定要進行身份模擬的帳號,這個帳號必須是本地已經存在的帳號,點 Set 輸入這個帳號的名稱和密碼。

然後點OK。

到這裡,按照 MSDN 中的幫助文件,身份模擬應該就算設定成功了。

然後我做了一個簡單的測試頁面看看身份模擬是否成功,測試程式如下:

 

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
}

執行的結果居然是:

NT AUTHORITY\IUSR

也就是說 Asp.net 沒有用我設定的這個 MyAccount 帳號模擬執行,而是仍然用IUSR 帳號模擬執行。查了好久,才發現是下面問題造成:

用 Virtual Studio 2008 生成網站時,web.config 檔案中預設會有這樣一個設定:

<identity impersonate="true" />

這個設定是為 IIS 6 做身份模擬而設定的。在這種情況下,使用者身份的認證交給IIS來進行。當允許匿名登入時,IIS將一個匿名登入使用的標識(預設情況下是IUSR)交給ASP.NET應用程式。當不允許匿名登入時,IIS將認證過的身份標識傳遞給ASP.NET應用程式。ASP.NET的具體訪問許可權由該賬號的許可權決定。

這個設定在 IIS 7 下已經過時了,如果用古典模式,才需要這樣設定。

找到問題原因後,我把 <identity impersonate=”true” />  這個配置項從 web.config 中刪除了。刪除後,就可以用到前面在介面上配置的使用者名稱來模擬帳號了。

然而先不要高興的太早,緊接著就出現了新的問題。 錯誤如下:

Could not load file or assembly ‘xxxx’ or one of its dependencies. Access is denied.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IO.FileLoadException: Could not load file or assembly ‘GetPathFileLib’ or one of its dependencies. Access is denied.
Source Error:

從錯誤提示看,應該是目前這個模擬帳戶沒有足夠的許可權去執行 bin 目錄下的 xxxx.dll ,於是我把bin 目錄賦予模擬帳戶 MyAccount 完全控制的許可權,結果還是不行,我在網上搜了一下,有人說需要將C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary 這個目錄也設定為完全控制,於是照做了,還是不行。無奈之下,我把MyAccount 帳戶加入了 IIS_IUSRS這個群組,問題終於解決。

image

現在我們再執行上面那個顯示當前使用者的程式碼顯示結果為

MachineName\MyAccout注意:我們必須要把 <identity impersonate=”true” /> 刪除才行,如果僅僅是設定為 <identity impersonate=”false” />

模擬的帳戶會變成  IIS APPPOOL\DefaultAppPool,這個設定是不正確的。

到這裡IIS7 下設定身份模擬就全部完成了。

您可能感興趣的文章:

Windows Server 2012 Iis8 php環境配置方法win2008下安裝SQL SERVER 2005出現IIS功能要求 警告解決方案windows server 2008R2系統 IIS7.5配置偽靜態的方法(urlrewrite)Windows server 2008 iis7/iis7.5啟用父路徑的方法win2003 iis6.0 NET2.0的Server Application Unavailable的問題!Tomcat6.0與windows 2003 server 的IIS伺服器整合windows server 2008/2012安裝php iis7 mysql環境搭建教程Windws Server 2008 R2 WEB環境配置之安裝IIS方法Microsoft Windows 2008 Server R2 iis7.5上傳檔案限制200K更改Win2008 Server下IIS配置安裝教程