瞭解 ASP.NET 的執行身份識別
預設的 ASP.NET 執行識別
當 ASP.NET 在 IIS 伺服器上執行時,其工作處理序會有一個執行的識別,如下圖
這個 ASP.NET 背景工作處理序的執行識別,使用不同的 IIS 版本會有所不同:
- 在 Microsoft Windows 2000 和 Windows XP Professional 上,是本機 ASPNET帳戶。
- 在 IIS6 或 IIS7 的傳統模式下,預設是 NETWORK SERVICE帳戶。
- 在 IIS7 整合管線模式下,取得的身份識別預設是所屬之 IIS 應用程式集區的識別,所以不同的應用程式集區會有不同的識別,如 IIS AppPool\DefaultAppPool .
變更 ASP.NET 的執行識別
若你不喜歡預設的執行識別,你也可以變更應用程式集區的執行識別:
- 如果 AppPool 的識別設定為 ApplicationPoolIdentity ,這是管線模式下的預設值,其執行識別是 IIS APPPOOL\[AppPoolName
- 如果 AppPool 的識別設定為 NetworkService ,那就是 NetworkService
- 你也可以指定特定的帳戶。
【IIS APPPOOL\[AppPoolName】這是一個虛擬帳戶,若要對特定資料夾存取,要注意其存取權限,相關的設定可參考保哥的這篇設定。
Windows 認證
啟用 Windows 認證
要啟用 Windows 認證,你可以在 IIS 中設定啟用 Windows 認證,也可以直接更改 Web.config 組態檔。
使用匿名存取
匿名存取的預設值為 false。若要使用匿名存取,必須完成以下二個設定:
1) 在 IIS 中設定啟用「匿名存取」
2) Web.config 組態檔也必須設定成允許所有使用者
以登入者身份模擬 ASP.NET 執行身份識別
要使用登入者身份來模擬 ASP.NET 執行身份識別,你可以在 IIS 中設定啟用「ASP.NET 模擬」,也可以直接更改 Web.config 組態檔。
在 IIS 中設定啟用「ASP.NET 模擬」
在 Web.config 組態檔中設定啟用「ASP.NET 模擬」
使用特定帳戶模擬
以登入者帳戶模擬
使用匿名帳戶模擬
若你使用「ASP.NET 模擬」,又啟用「匿名存取」,則你會看到 500.24 錯誤。
這是因為在IIS7 的整合管線模式下是不允許的。有二個解決辦法:
1) 改用傳統模式
2) 修改 Web.config 組態檔
若要在整合管線模式兼顧傳統模式,則必須停用整合模式的驗證,設定如下:
取得執行識別的名稱
若你要取得ASP.NET執行識別的名稱,你可以使用以下程式碼:
string identityName = WindowsIdentity.GetCurrent().Name
若你要取得的是登入者身分識別,則你可以使用以下程式碼:
string userIdentity = HttpContext.Current.User.Identity.Name;
自動啟用整合式 Windows 驗證
當你連到一個使用 Windows 驗證的網站,系統通常會彈出訊問使用者資訊的小視窗,如下圖:
若你使用 IE 瀏灠器,只要變更以下設定就可以啟用自動驗證,如下圖:
若你使用 FireFox 瀏灠器,可以參考保哥這篇設定。
ASP.NET執行識別 VS 使用者識別
Windows 認證
匿名存取 | |||
啟用 | 停用 | ||
模擬 | 啟用 | NT AUTHORITY\IUSR | domain\vito |
停用 | * IIS APPPOOL\DefaultAppPool | * IIS APPPOOL\DefaultAppPool |
Form 認證
Windows Identity | User Identity | |
Windows 認證(impersonate="false") | IIS AppPool\DefaultAppPool | domain\vito |
Windows 認證(impersonate="true") | domain\vito | domain\vito |
Form 認證 | IIS AppPool\DefaultAppPool | formUser |