同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 修改ASP.NET程序運(yùn)行帳號

修改ASP.NET程序運(yùn)行帳號

來源: | 時(shí)間:2011/4/9 8:50:17 |

    在個(gè)人所經(jīng)歷的幾個(gè)ASP.NET項(xiàng)目中經(jīng)常被權(quán)限問題困擾,大部分時(shí)間都是因?yàn)檎军c(diǎn)的運(yùn)行帳號配置有問題。偶然發(fā)現(xiàn)這篇文章,感覺對ASP.NET中各種帳號的配置及使用講解比較透徹,讀來受益匪淺,所以翻譯過來跟大家分享。這篇是本人第一次翻譯,有不準(zhǔn)確或者錯(cuò)誤的地方,大家多指點(diǎn)。

背景知識

     所有應(yīng)用程序在進(jìn)程內(nèi)運(yùn)行。在IIS6.0中,ASP.NET Web程序運(yùn)行在IIS工作進(jìn)程(w3wp.exe)內(nèi)。在默認(rèn)情況下,該進(jìn)程以Network Service帳號下運(yùn)行。相似的,在IIS5.0(以及在IIS5.0隔離模式下運(yùn)行的IIS6.0)中,ASP.NET Web程序運(yùn)行在ASP.NET工作進(jìn)程(aspnet_wp.exe)內(nèi)。該進(jìn)程在默認(rèn)情況下以ASPNET帳號運(yùn)行。 ASP.NET的架構(gòu)允許用戶修改此配置,以保證Web程序的安全運(yùn)行。

 

應(yīng)用程序域與ASP.NET

      應(yīng)用程序域(Application Domain)是與進(jìn)程對等的CLR(Application domains are the common language runtime equivalent to process boundaries.)。一個(gè)進(jìn)程可以包含多個(gè)應(yīng)用程序域。盡管多個(gè)應(yīng)用程序域同在一個(gè)進(jìn)程內(nèi),運(yùn)行在一個(gè)應(yīng)用程序域中的代碼無法訪問被另一個(gè)應(yīng)用程序域中的代碼所使用的內(nèi)存空間。

      在IIS6.0中,IIS會為每個(gè)應(yīng)用程序池(Application Pool)創(chuàng)建一個(gè)IIS工作進(jìn)程。每個(gè)應(yīng)用程序池內(nèi)都包含零到多個(gè)Web程序。每個(gè)Web應(yīng)用程序都運(yùn)行在各自的應(yīng)用程序域內(nèi)。應(yīng)用程序域與Web應(yīng)用程序的映射的好處在于當(dāng)一個(gè)應(yīng)用程序池中的Web程序出現(xiàn)嚴(yán)重錯(cuò)誤時(shí),運(yùn)行在其他應(yīng)用程序池中的Web程序不會受影響。

IIS與ASP.NET Identity

     如前所述,在默認(rèn)情況下,IIS工作進(jìn)程和ASP.NET工作進(jìn)程分別以Network Service和ASPNET身份運(yùn)行。在Window Server 2003系統(tǒng)中,用戶可以通過查看ASP.NET Web程序的應(yīng)用程序池的屬性中的Identity標(biāo)簽來查看該進(jìn)程的運(yùn)行帳號,如下圖所示:

 

 

 

        在Window 2000和XP系統(tǒng)中,用戶可以查看Web服務(wù)器的machine.config文件中的<processModel>元素的配置來確定進(jìn)程運(yùn)行帳號。該屬性支持一下兩個(gè)最常見的屬性:

    • username

        該屬性指定ASP.NET工作進(jìn)程的運(yùn)行賬戶。該賬戶可以是任何有效本機(jī)帳號或者域帳號。除此之外,用戶還可以指定以下值:

  • System : 該值指定ASP.NET工作進(jìn)程以Local System帳號運(yùn)行。Locao System具有較高的權(quán)限(具有完全的管理權(quán)限),故指定該帳號時(shí)需謹(jǐn)慎。
  • Machine :該值指定ASP.NET工作進(jìn)程以ASP.NET service帳號運(yùn)行。該身份就是Window Server2003下的Network Service帳號,WindowsXP下的ASPNET帳號。
    • password

       該值指定前面所設(shè)置用戶的密碼。如果上面的UserName指定的是Machine,該值應(yīng)設(shè)為autogenerate。

     當(dāng)IIS工作進(jìn)程或者ASP.NET工作進(jìn)程啟動(dòng)一個(gè)Web程序,而且該Web程序禁用了impersonation,那么該Web程序使用IIS或ASPNET工作進(jìn)程中設(shè)置的帳號運(yùn)行。如果Web程序啟動(dòng)了Impersonation,則Web程序使用通過IIS驗(yàn)證的用戶帳號或者在Web.config中配置的帳號??梢酝ㄟ^以下2種方式啟用Impersonation:

    <identity impersonate="true"/> 

    該條件下,Web程序使用通過IIS驗(yàn)證的帳號運(yùn)行。

    <identity impersonate="true" userName="someUserName" password="somePassword"/>

    該配置指定運(yùn)行Web程序使用所配置帳號運(yùn)行。

       如果在IIS中只啟用了匿名訪問,IIS傳遞給Web程序的帳號是匿名帳號,亦即<machine>\IUSER_<machine>,其中<machine>是運(yùn)行IIS的服務(wù)器名稱。如果IIS中只啟用了Windows集成驗(yàn)證,那么IIS傳遞給Web程序的帳號則是通過驗(yàn)證的Windows帳號。如果同時(shí)啟用了兩者,IIS傳遞給Web程序的帳號則是通過IIS驗(yàn)證的帳號。IIS首先嘗試以匿名方式訪問Web程序或者資源。如果匿名方式無權(quán)限訪問,則IIS嘗試使用Windows驗(yàn)證。

 

WindowsIdentity.GetCurrent()與User.Identity.Name

     獲取ASP.NET 程序的當(dāng)前用戶帳號可以使用以下下兩個(gè)對象:

  • WindowsIdentity.GetCurrent()

該方法返回一個(gè)WindowsIdentity實(shí)例,亦即運(yùn)行該線程的帳號。

  • User.Identity.Name

User.Identity對象代表從IIS傳遞到Web程序的用戶帳號。若IIS允許用戶匿名訪問某頁面,則User.Identity.Name屬性值為空字符串,否則,將會返回通過IIS驗(yàn)證的用戶帳號。

     假設(shè)一個(gè)Web程序,其在IIS的配置為啟用Windows集成驗(yàn)證,Web程序所使用的應(yīng)用程序池的Identity屬性配置為Network Service。下表對比了在不同Impersonation/Anonymous acess配置情況下,當(dāng)域用戶BVS\JamesH訪問該Web程序時(shí),上述兩個(gè)對象的輸出情況:

 


 

 

結(jié)論

     在啟用Impersonation的情況下,Web程序以IIS傳遞過來的帳號運(yùn)行。如果禁用了Impersonation,Web程序則以IIS工作進(jìn)程或ASPNET工作進(jìn)程所配置的帳號運(yùn)行。IIS工作進(jìn)程所使用的帳號在由應(yīng)用程序使用的應(yīng)用程序池的Identity屬性指定。ASP.NET工作進(jìn)程所使用的帳號在服務(wù)器的machine.config文件中的<processModel>節(jié)配置。

服務(wù)熱線

153 8323 9821

功能和特性

價(jià)格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號