2013年4月23日 星期二

Windows驗證

瞭解 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 組態檔。

<authentication mode="Windows" />

使用匿名存取

匿名存取的預設值為 false。若要使用匿名存取,必須完成以下二個設定:

1) 在 IIS 中設定啟用「匿名存取」

2) Web.config 組態檔也必須設定成允許所有使用者

<authorization>
      <allow users="*" />
    </authorization>

以登入者身份模擬 ASP.NET 執行身份識別

要使用登入者身份來模擬 ASP.NET 執行身份識別,你可以在 IIS 中設定啟用「ASP.NET 模擬」,也可以直接更改 Web.config 組態檔。

在 IIS 中設定啟用「ASP.NET 模擬」

在 Web.config 組態檔中設定啟用「ASP.NET 模擬」

使用特定帳戶模擬

<identity impersonate="true" userName="vito" password="2213" />

以登入者帳戶模擬

<identity impersonate="true" />

使用匿名帳戶模擬

若你使用「ASP.NET 模擬」,又啟用「匿名存取」,則你會看到 500.24 錯誤。

這是因為在IIS7 的整合管線模式下是不允許的。有二個解決辦法:

1) 改用傳統模式

2) 修改 Web.config 組態檔

若要在整合管線模式兼顧傳統模式,則必須停用整合模式的驗證,設定如下:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>

取得執行識別的名稱

若你要取得ASP.NET執行識別的名稱,你可以使用以下程式碼:

string identityName = WindowsIdentity.GetCurrent().Name

若你要取得的是登入者身分識別,則你可以使用以下程式碼:

string userIdentity = HttpContext.Current.User.Identity.Name;

自動啟用整合式 Windows 驗證

當你連到一個使用 Windows 驗證的網站,系統通常會彈出訊問使用者資訊的小視窗,如下圖:

若你使用 IE 瀏灠器,只要變更以下設定就可以啟用自動驗證,如下圖:

若你使用 FireFox 瀏灠器,可以參考保哥這篇設定

ASP.NET執行識別 VS 使用者識別

Windows 認證

匿名存取
啟用停用
模擬啟用NT AUTHORITY\IUSRdomain\vito
停用* IIS APPPOOL\DefaultAppPool* IIS APPPOOL\DefaultAppPool

Form 認證

Windows Identity User Identity
Windows 認證(impersonate="false")IIS AppPool\DefaultAppPooldomain\vito
Windows 認證(impersonate="true") domain\vito domain\vito
Form 認證 IIS AppPool\DefaultAppPoolformUser

1 則留言: