程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> ASP.NET如何實現身份模擬

ASP.NET如何實現身份模擬

編輯:關於C#
 

使用模擬時,ASP.NET 應用程序可以選擇以這些應用程序當前正為之操作的客戶的身份執行。通常這樣做的原因是為了避免在 ASP.NET 應用程序代碼中處理身份驗證和授權問題。而您依賴於 Microsoft Internet 信息服務 (IIS) 來驗證用戶,然後將已通過驗證的標記傳遞給 ASP.NET 應用程序;或者,如果無法驗證用戶,則傳遞未經身份驗證的標記。不論何種情況,如果啟用了“模擬”,則 ASP.NET 應用程序會模擬所收到的任何標記。當前模擬客戶的 ASP.NET 應用程序依賴於 NTFS 目錄和文件中的設置來允許客戶獲得訪問權限或拒絕其訪問。務必將服務器文件空間格式化為 NTFS,以便可以設置訪問權限。

默認情況下禁用模擬。為了 ASP 的兼容性,用戶必須顯式啟用模擬。如果為給定的應用程序啟用模擬,則 ASP.NET 總是模擬 IIS 提供給 ISAPI 擴展的訪問標記。該標記既可以是已驗證用戶標記,也可以是匿名用戶的標記(如 IUSR_MACHINENAME)。不論應用程序中使用哪種身份驗證類型,模擬都會發生。

只能模擬應用程序代碼,編譯和配置作為進程標記讀取。編譯的結果放在“Temporary ASP.NET files”目錄中。所模擬的帳戶需要對該目錄的讀/寫訪問權。如果應用程序位於通用命名規則 (UNC) 共享上,除非使用配置帳戶,否則,ASP.NET 將總是模擬提供給 IIS 的標記來訪問該共享。如果提供了顯式配置的帳戶,ASP.NET 將使用該帳戶取代 IIS UNC 標記。確實需要基於每個請求的模擬的應用程序可以直接配置為模擬提交請求的用戶。

默認情況下,在計算機級別上禁用模擬。而且除非被重寫,否則所有的應用程序域都繼承此設置。可以通過將配置文件放置在應用程序根目錄下來啟用模擬。有關 ASP.NET 配置系統的更多信息,請參見 ASP.NET 配置。

與其他配置指令的情況相同,此指令分層應用。除非被顯式重寫,否則,層次結構中的嵌套程序將遵從它。此設置的默認值如下所示。

<impersonation enable="false"/>

為應用程序啟用模擬的最小配置文件可能看上去和下面的示例類似。

<!-- Web.config file. -->
<identity impersonate="true"/>

還有以可配置身份運行應用程序的名稱支持。例如:

<identity impersonate="true" userName="contoso/Jane" password="pass"/>

這將允許整個應用程序以 contoso/Jane 運行,不論請求的身份如何,只要密碼正確即可。可以將這種類型的模擬委托給另一台計算機。

您可以以編程的方式讀取被模擬用戶的標識,如下例所示。

[Visual Basic]
Dim username As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name

[C#]
String username = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

在上例中,userName 和 password 以明文形式存儲在配置文件中。雖然 IIS 不傳輸 .config 文件來響應用戶代理請求,但是可以通過其他途徑讀取配置文件,例如通過在包含服務器的域上具有適當憑據的已經過身份驗證的用戶。為了增強安全性,標識部分支持在注冊表中存儲加密的 userName 和 password 屬性,如下例所示。

userName="registry:HKLM/Software/AspNetIdentity,Name"
password="registry:HKLM/Software/AspNetIdentity,Password"

字符串中位於關鍵字 registry 之後和逗號之前的部分表示 ASP.NET 打開的注冊表項的名稱。逗號之後的部分包含一個字符串值的名稱,ASP.NET 從此名稱中讀取憑據。必須有逗號,並且憑據必須存儲在 HKLM 配置單元中。如果配置格式不正確,則 ASP.NET 不會啟動輔助進程,然後將顯示造成當前帳戶創建失敗的代碼路徑。

憑據必須為 REG_BINARY 格式,並且包含 Windows API 函數 CryptProtectData 調用的輸出。可以用 ASP.NET 設置注冊表控制台應用程序 (Aspnet_setreg.exe) 來創建加密憑據並將它們存儲在注冊表中。該應用程序使用 CryptProtectData 完成加密。若要同 Visual C++ 源代碼和文檔一起下載 Aspnet_setreg.exe,請訪問 Web 站點 www.asp.net 並搜索“aspnet_setreg”。

應該對存儲加密憑據的密鑰的訪問權限進行配置,僅向 Administrators 和 SYSTEM 提供訪問權。由於密鑰會被作為 SYSTEM 運行的 ASP.NET 進程讀取,因此應設置以下權限:

Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
這可以提供兩道保護數據的防線:

ACL 權限要求訪問數據的身份是 Administrator。
攻擊者必須在服務器上運行代碼 (CryptUnprotectData) 才能恢復帳戶的憑據。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved