配置安全鑒別 鑒別是指鑒定來訪用戶是否合法的過程。ASP.NET Framework支持三種鑒別類型: Windows鑒別; NET Passport鑒別; Forms鑒別。 對于某一特定的應用程序,同一時刻只能啟用其中一種鑒別方式。例如,不能在同一時刻同時啟用Windows鑒別和Forms鑒別。 在默認情況下,系統(tǒng)將啟用Windows鑒別。當Windows鑒別啟用后,用戶通過微軟Windows系統(tǒng)的賬戶名進行驗證。此時的角色對應于微軟Windows系統(tǒng)中的用戶組。 Windows鑒別將驗證用戶的職責委派給了IIS(因特網(wǎng)信息服務器端)。通過對IIS進行配置,IIS可以使用基本、Windows集成和明文鑒別三種驗證方式。 .NET Passport鑒別是諸如MSN和Hotmail這樣的微軟Web站點使用的鑒別類型。如果希望用戶使用其Hotmail賬號和密碼來登錄到應用程序中,那么可以啟用.NET Passport鑒別來進行用戶驗證。 注解 在使用微軟.NET Passport鑒別之前,必須要下載并安裝微軟.NET Passport SDK,并在微軟網(wǎng)站進行注冊并向微軟付費。要了解更多相關信息,可以參看MSDN網(wǎng)站(http://msdn.microsoft.com)。 最后一種鑒別是Forms鑒別。啟用Forms鑒別后,通常會使用cookie來驗證用戶(詳細內(nèi)容見下一節(jié))。一旦用戶通過鑒別,一個加密的cookie信息就會添加到用戶的瀏覽器中。當該用戶從一個頁面進入另一個頁面時,系統(tǒng)的鑒別程序?qū)⑼ㄟ^cookie類來進行用戶合法性驗證。 啟用Forms鑒別后,用戶和角色信息就會被保存到自定義的數(shù)據(jù)區(qū)域中。也就是說可以將用戶信息保存到你所希望的任何地方。例如,可以將用戶名和密碼保存到數(shù)據(jù)庫、XML文件或者甚至是純文本文件中。 在前一版本的ASP.NET中,如果使用Forms鑒別,就要編寫所有保存和獲取用戶信息的代碼。而創(chuàng)建ASP.NET 2.0應用程序,則可以讓ASP.NET Membership來為你完成所有這些工作。使用ASP.NET Membership可以處理保存、獲取用戶以及角色信息的所有細節(jié)。 通過配置應用程序根目錄下的Web配置文件,可以為我們的應用程序啟用特定的鑒別類型。代碼清單2-1中的文件配置并啟用了Forms鑒別。 代碼清單2-1 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms" /> </system.web> </configuration> 代碼清單2-1中,authentication節(jié)點的mode屬性設置為Forms。該mode屬性可能的取值有None、Windows、Forms和Passport。 注解 Windows、Forms和Passport鑒別實現(xiàn)在HTTP模塊之中。如果要實現(xiàn)自定義的鑒別結構,就要創(chuàng)建自定義的HTTP模塊。Visual Web 如果你愿意,可以通過站點配置工具來為應用程序啟用特殊的鑒別類型。該工具以表單界面提供了對Web配置文件的修改功能。通過選取菜單選項WebSite(站點)→ASP.NET Configuration(ASP.NET配置),便可以打開站點管理工具。 配置Forms鑒別 Forms鑒別的幾個配置細節(jié): cookieless——用于配置應用程序即使瀏覽器不支持cookie特性,也能使用Forms鑒別。可能的取值有UseCookies、UseUri、AutoDetect和UseDeviceProfile。默認值是UseDeviceProfile; defaultUrl——用于指定用戶通過鑒別后重定向的目標。默認值是Default.aspx; domain——用于指定與鑒別cookie相關的域。默認值是空字符串; enableCrossAppRedirects——用于通過傳遞查詢字符串中的鑒別憑證來在應用程序之間鑒別用戶。默認值是false; loginUrl——用于指定Login頁面的路徑。默認值是Login.aspx; name——用于指定鑒別cookie的名字。默認值為.ASPXAUTH; path——用于指定和鑒別與cookie相關聯(lián)的路徑。默認值是/; protection——用于指定如何對鑒別cookie進行加密??赡艿娜≈涤蠥ll、Encryption、None和Validation。默認值是All; requiresSSL——用于指定在傳遞鑒別cookie時是否需要使用SSL(安全套接字層)連接。默認值是false; slidingExpiration——用于防止鑒別cookie在連續(xù)周期性訪問中過期。可能的取值是true或false; timeout——用于指定以分鐘為單位的鑒別cookie的過期時間數(shù)。默認值是30。 這些配置設置中的幾個特性與鑒別cookie有關。例如,可以使用代碼清單2-2中的Web配置文件來改變鑒別cookie的名稱。 代碼清單2-2 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms name="MyApp" /> </authentication> </system.web> </configuration> 這些選項中的其他部分還需另加說明。在下面的章節(jié)中,將介紹如何使用無cookie鑒別,修改cookie過期策略并啟用應用程序間鑒別。 使用無cookie的Forms鑒別 通常情況下,F(xiàn)orms鑒別使用cookie來對用戶進行識別。然而,F(xiàn)orms鑒別還支持一個名為無cookie鑒別的特性。啟用無cookie鑒別后,就可以在不依靠瀏覽器cookie的情況下識別用戶。 利用無cookie鑒別功能,將可以在不支持cookie或禁用了cookie功能的瀏覽器中使用Forms鑒別和ASP.NET Membership。 當啟用無cookie鑒別功能后,用戶將通過一串添加到頁面URL中的唯一的字符串標識來進行識別。如果用戶在應用程序的相關頁面間來回導航,那么字符串標識也將自動地在這些頁面間進行傳遞,同時應用程序會在這樣的頁面交叉請求中自動識別用戶。 當訪問一個需要鑒別且又開啟了無cookie鑒別功能的頁面時,瀏覽器地址欄中的URL看起來將會像這樣: http://localhost:2500/Original/(F(WfAnevWxFyuN4SpenRclAEh_lY6OKWVllOKdQkRk tOqV7cfcrgUJ2NKxNhH9dTA7fgzZ-cZwyr4ojyU6EnarC-bbf8g4sl6m4k5kk6Nmcsg1))/ SecretFiles/Secret2.aspx 在URL中那串又長又丑的代碼就是編碼過的用戶鑒別憑證。 Web配置文件中的forms節(jié)點的cookieless屬性被用來配置無cookie鑒別的類型。cookieless屬性可以接受下列四種類型中的任意一種: UseCookies——總是使用cookie進行鑒別,無論瀏覽器或設備是否支持cookie; UseUri——使用查詢字符串保存鑒別標識,無論瀏覽器或設備是否支持cookie; AutoDetect——ASP.NET自動檢測瀏覽器或設備是否支持cookie,從而確定如何傳遞用戶識別憑證; UseDeviceProfile——ASP.NET根據(jù)System.Web.HttpBrowserCapabilities設置來確定是否使用cookie來傳遞用戶識別憑證。 該屬性的默認值是UseDeviceProfile。在默認情況下,只有當特定的設備類型支持cookie時,ASP.NET Framework才會生成cookie信息。ASP.NET Framework通過下面的目錄中的一組文件來維護一個設備性能數(shù)據(jù)庫。 \WINDOWS\Microsoft.NET\Framework\[version]\CONFIG\Browsers 默認情況下,在使用諸如微軟IE這樣的瀏覽器時,ASP.NET Framework根本不使用無cookie鑒別。根據(jù)IE的設備特性,IE支持cookie,所以一般情況下不會使用無cookie鑒別。即使瀏覽器的cookie功能被禁用,該框架也不會使用無cookie鑒別。 如果希望ASP.NET Framework能自動檢測瀏覽器是否支持cookie功能,那么必須將cookieless屬性值設置為AutoDetect。當開啟了AutoDetect后,ASP.NET Framework將檢查瀏覽器是否發(fā)送了HTTP COOKIE協(xié)議標識。如果發(fā)現(xiàn)有COOKIE協(xié)議標識,那么鑒別cookie將傳給瀏覽器。否則,ASP.NET Framework使用無cookie鑒別。 代碼清單2-3中的Web配置文件啟用了AutoDetect功能。 代碼清單2-3 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms cookieless="AutoDetect"/> </authentication> </system.web> </configuration> 在Forms鑒別中使用超時限制 在默認情況下,F(xiàn)orms鑒別使用超時限制策略。即用戶在30分鐘以內(nèi)沒有請求任何頁面,那么該用戶仍然處于已鑒別狀態(tài)。如果用戶在合法登錄后超過連續(xù)30分鐘未訪問任何頁面,那么該用戶將自動登出應用程序。 如果需要十分嚴格的安全限制條件,那么可以使用比超時限制更安全一些的絕對限制策略。換言之,應用程序可以強制用戶在一個指定的周期時間內(nèi)再次登錄。 代碼清單2-4中的Web配置文件強制用戶每分鐘都進行一次登錄。 代碼清單2-4 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms slidingExpiration="false" timeout="1" /> </authentication> </system.web> </configuration> 跨應用程序使用Forms鑒別 在默認情況下,F(xiàn)orms鑒別是和應用程序密切相關的。換句話說,如果用戶登錄到了某一應用程序中,但是該用戶卻并未在任何其他應用程序中被鑒別——即使另外的應用程序和該用戶已登錄的應用程序位于同一臺Web服務器端上。 由此所引起的問題表現(xiàn)在兩個方面。第一,你不希望公司的員工在不同的公司應用程序間切換時進行多次登錄。每個員工應該可以只登錄一次,就能自動地使用公司所提供的所有應用程序。 第二,如果你在運行一個Web服務器端集群(Web Farm),那么你一定不希望用戶在訪問Web服務器端所提供的不同服務時都進行登錄。從用戶的角度,Web服務器端集群可以看成是一個單一的服務器端。 在默認情況下,F(xiàn)orms鑒別的cookie是會加密和簽名的。此外,每個應用程序默認都會各自生成獨立的解密和校驗碼。因此,默認情況下也不能在應用程序間共享鑒別cookie。 通過Web配置文件的machineKey節(jié)點,可以設置該加密密鑰和校驗碼: <machineKey decryption="Auto" validation="SHA1" decryptionKey="AutoGenerate, IsolateApps" validationKey="AutoGenerate, IsolateApps" /> 解碼(decryption)屬性用于指定Forms鑒別中cookie的加密和解密算法,其取值有Auto、AES(政府標準加密算法)或3DES(三倍加密強度的DES)。decryption屬性默認值為Auto,該值說明ASP.NET Framework將基于當前Web服務器端的性能來選取綜合性能最佳的加密算法。 驗證(validation)屬性指定用于對鑒別cookie進行散列和加密的算法,其取值為AES、MD5、SHA1或TripleDES(即3DES)。 decryptionKey屬性表示用于對鑒別cookie進行加密和解密的密鑰。validationKey表示用于對鑒別cookie進行簽名的驗證碼。在默認情況下,這兩個屬性值都會被設置為AutoGenerate,該值表示ASP.NET Framework將產(chǎn)生隨機密鑰,并將其存儲在LSA(本地安全鑒別)中。 需要注意的是,decryptionKey和validationKey兩個屬性都包含一個IsolateApps修飾符。當IsolateApps修飾符出現(xiàn)時,將為同一Web服務器端上的每個應用程序創(chuàng)建唯一的密鑰。 如果希望在同一Web服務器端上的不用應用程序之間共享同一鑒別cookie信息,那么則需要重寫服務器端上Web配置文件中的machineKey節(jié)點,并從該節(jié)點的decryptionKey和validationKey兩個屬性中去掉IsolateApps修飾符。即可以在Web配置文件的System.Web節(jié)點中的任意位置添加如下machineKey節(jié)點: <machineKey decryption="Auto" validation="SHA1" decryptionKey="AutoGenerate" validationKey="AutoGenerate" /> 根Web配置文件位于下面的路徑: C:\WINDOWS\Microsoft.NET\Framework\[version]\CONFIG\Web.Config 另一方面,如果要共享不同Web服務器端上的應用程序的鑒別cookie信息,那么就需要手動指定decryptionKey和validationKey的屬性值。由于需要共享不同Web服務器端上的密鑰,所以就不能讓ASP.NET Framework來自動產(chǎn)生這些密鑰。 例如,下面的machineKey節(jié)點中包含了顯式指定的加密和驗證密鑰: <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DACA53DBB3C3E0AD2" validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DAB98B8EFD19C711337E26948E26D1D 174B159973EA0BE8CC9CAA6AAF513BF84E44B2247792265" /> 當使用AES算法時,需要一個64位的十六進制字符隨機序列。當使用SHA1算法時,需要一個128位的十六進制字符隨機序列。代碼清單2-5中的頁面可以用來生成這樣的隨機字符串序列(見圖2-1)。 代碼清單2-5 GenerateKeys.aspx <%@ Page Language="C#" %> <%@ Import Namespace="System.Security.Cryptography" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void Page_Load() { lblAES.Text = GetSequence(64); lblSHA1.Text = GetSequence(128); } private string GetSequence(int length) { byte[] buffer = new byte[length/2]; RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider(); provider.GetBytes(buffer); StringBuilder builder = new StringBuilder(length); for (int i = 0; i < buffer.Length; i++) builder.Append(string.Format("{0:X2}", buffer[i])); return builder.ToString(); } </script> <html xmlns="http://www./1999/xhtml" > <head id="Head1" runat="server"> <title>Generate Keys</title> </head> <body> <form id="form1" runat="server"> <div> AES: <asp:Label id="lblAES" Runat="server" /> <br /><br /> SHA1: <asp:Label id="lblSHA1" Runat="server" /> </div> </form> </body> </html> 圖2-1 創(chuàng)建加密密鑰 代碼清單2-5中的頁面使用RNGCryptoServiceProvider來生成隨機序列。調(diào)用GetBytes()方法將返回該隨機加密密鑰。 注解 這里的GenerateKey.aspx頁面基于文章《如何:在ASP.NET 2.0中配置MachineKey》(How To:Configure MachineKey in ASP.NET 2.0)中的代碼示例,該文位于微軟MSDN站點中(http://msdn.microsoft.com)。 顯式指定了密鑰的machineKey節(jié)點既可以加入服務器端的Web配置文件,也可以加入特定應用程序的Web配置文件。如果不希望同一Web服務器端上的所有應用程序之間都共享同一密鑰,那么就只應將該machineKey節(jié)點加入到需要相互共享的應用程序的配置文件中。 跨域使用Forms鑒別 在上一節(jié)中,介紹了如何在同一個Web服務器端或不同Web服務器端中的多個應用程序之間共享同一個鑒別cookie。但是如何才能在多個域之間共享同一個鑒別cookie呢? 瀏覽器的cookie總是和Web站點的域相關的。例如,Amazon站點不能讀取Barnes和Noble站點所設置的cookie信息,這是一個很好的設計??墒牵憧赡軙l(fā)現(xiàn)你需要在不同域的站點之間共享鑒別信息。 解決這個問題的方法是使用查詢字符串來代替cookie傳遞鑒別憑證。因為在不同的域之間傳遞查詢字符串是沒有任何障礙的。 要應用到這樣的場景中,必須要配置應用程序能接受通過查詢字符串傳遞的鑒別憑證。代碼清單2-6中的Web配置文件包含了一個enableCrossAppRedirects屬性,通過設置該屬性可以啟用跨域的鑒別憑證共享。 代碼清單2-6 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms enableCrossAppRedirects="true" /> </authentication> <machineKey decryption="AES" validation="SHA1" decryptionKey="306C1FA852AB3B0115150DD8BA30821CDFD125538A0C606DACA53DBB3C3E0AD2" validationKey="61A8E04A146AFFAB81B6AD19654F99EA7370807F18F5002725DAB98B8EFD19C711337 E26948E26D1D174B159973EA0BE8CC9CAA6AAF513BF84E44B2247792265" /> </system.web> </configuration> 如果將代碼清單2-6中的Web配置文件添加到位于不同域中的兩個應用程序中后,這兩個應用程序就將能共享同一個鑒別憑證。 注意 為了確保代碼清單2-6中所指定的驗證和加密密鑰格式正確,可以通過使用上一節(jié)中我們所討論的GenerateKeys.aspx頁面來生成新的隨機密鑰。 當連接或從一個應用程序重定向到另一個應用程序時,必須通過查詢字符串參數(shù)來傳遞鑒別憑證。代碼清單2-7中的頁面將必要的查詢字符串參數(shù)添加到了超鏈接中。 代碼清單2-7 QueryStringAuthenticate.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void Page_Load() { string cookieName = FormsAuthentication.FormsCookieName; string cookieValue = FormsAuthentication.GetAuthCookie(User.Identity.Name, false).Value; lnkOtherDomain.NavigateUrl += String.Format("?{0}={1}", cookieName, cookieValue); } </script> <html xmlns="http://www./1999/xhtml" > <head id="Head1" runat="server"> <title>Query String Authenticate</title> </head> <body> <form id="form1" runat="server"> <div> <asp:HyperLink id="lnkOtherDomain" Text="Link to Other Domain" NavigateUrl="http://www.OtherDomain.com/Secret.aspx" Runat="server" /> </div> </form> </body> </html> 使用FormsAuthentication類 使用Froms鑒別的主要API是FormsAuthentication類。該類支持下列屬性: CookieDomain——用于返回鑒別cookie關聯(lián)的域; CookieMode——用于返回cookieless鑒別模式??赡艿娜≈涤蠥utoDetect、UseCookies、Use- DeviceProfile和UseUri; CookiesSupported——如果瀏覽器支持cookie和Forms鑒別,并同時啟用了cookie功能,那么將返回true; DefaultUrl——用于返回用戶鑒別成功后所轉(zhuǎn)向的頁面URL; EnableCrossAppRedirects——當鑒別憑證可以通過查詢字符串進行傳遞時,該屬性返回true; FormsCookieName——用于返回鑒別cookie的名字; FormsCookiePath——用于返回和鑒別cookie相關聯(lián)的路徑; LoginUrl——用于返回用戶鑒別時所轉(zhuǎn)向的頁面URL; RequireSSL——如果鑒別cookie必須使用SSL協(xié)議來傳輸,則該屬性返回true; SlidingExpiration——如果鑒別cookie使用超時限制策略,那么該屬性返回true。 這些屬性主要用于返回Web配置文件中對Forms鑒別的配置信息。 FormsAuthentication類還支持以下的方法: Authenticate——用于根據(jù)存儲在Web配置文件中的用戶名和密碼來驗證用戶名和密碼; Decrypt——用于解密鑒別cookie; GetAuthCookie——用于獲取鑒別cookie; GetRedirectUrl——用于獲取重定向到Login頁面上前的原始頁面路徑; HashPasswordForStoringInConfigFile——用于對將要存入Web配置文件中的密碼進行散列; RedirectFromLoginPage——用于使用戶返回重定向到Login頁面前的原始頁面; RedirectToLoginPage ——用于將用戶請求重定向到Login頁面; RenewTicketIfOld——用于更新已過期的鑒別cookie憑證; SetAuthCookie——用于創(chuàng)建和發(fā)布鑒別cookie; SignOut——用于移除用戶鑒別cookie并同時使其登出應用程序。 使用FormsAuthentication類的屬性和方法可以構建一個用戶注冊和登錄系統(tǒng),而無須使用ASP.NET Membership。例如,代碼清單2-8中的Web配置文件包含了一個用戶名和密碼的列表。 代碼清單2-8 Web.Config <?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms> <credentials passwordFormat="Clear"> <user name="Bill" password="secret" /> <user name="Jane" password="secret" /> <user name="Fred" password="secret" /> </credentials> </forms> </authentication> </system.web> </configuration> 代碼清單2-8中的Web配置文件包含了一個forms節(jié)點,該forms節(jié)點內(nèi)包含了一個credentials節(jié)點。而credentials節(jié)點內(nèi)又包含了一個用戶名和密碼列表。 需要注意的是credentials節(jié)點包含了一個passwordFormat屬性,該屬性值為Clear。如果需要,可以存放散列過的密碼來代替明文密碼。這樣一來,對于任何可以操作該服務器端的人來說,都不能看到用戶的實際密碼了。屬性passwordFormat的另外兩個可能的取值是MD5和SHA1。 注解 如果需要對密碼進行散列并存儲在Web配置文件中,那么可以使用(某一變量名)FormsAuthentication.HashPasswordForStoringInConfigFile()方法。該方法需要使用一個明文密碼和一個散列算法名作為其調(diào)用參數(shù),然后執(zhí)行返回該密碼的散列版本。 代碼清單2-9中的Login頁面包含了一個用戶名(User Name)和密碼(Password)文字輸入框(見圖2-2)。 圖2-2 依靠Web配置文件中的信任設置來鑒別用戶 代碼清單2-9 FormsLogin.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void btnLogin_Click(object sender, EventArgs e) { if (FormsAuthentication.Authenticate(txtUserName.Text,txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked); else lblError.Text = "Invalid user name/password"; } </script> <html xmlns="http://www./1999/xhtml" > <head id="Head1" runat="server"> <title>Forms Login</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label id="lblError" EnableViewState="false" ForeColor="Red" Runat="server" /> <br /><br /> <asp:Label id="lblUserName" Text="User Name:" AssociatedControlID="txtUserName" Runat="server" /> <br /> <asp:TextBox id="txtUserName" Runat="server" /> <br /><br /> <asp:Label id="lblPassword" Text="Password:" AssociatedControlID="txtPassword" Runat="server" /> <br /> <asp:TextBox id="txtPassword" TextMode="Password" Runat="server" /> <br /><br /> <asp:CheckBox id="chkRememberMe" Text="Remember Me" Runat="server" /> <br /><br /> <asp:Button id="btnLogin" Text="Login" OnClick="btnLogin_Click" Runat="server" /> </div> </form> </body> </html> 當點擊上圖所示的Login按鈕后,系統(tǒng)將會調(diào)用btnLogin_Click()事件處理函數(shù),并使用FormsAuthentication.Authenticate()方法來檢查通過文本輸入框(TextBox)控件輸入的用戶名和密碼是否與Web配置文件中的用戶名和密碼匹配。如果用戶鑒別成功,那么將會調(diào)用FormsAuthentication.RedirectFromLoginPgae()方法。 調(diào)用RedirectFromLoginPage()方法主要將完成兩件事。該方法會將鑒別cookie憑證加入到用戶的瀏覽器中,然后將頁面重定向回進入Login頁面時的原始頁面。如果用戶直接請求了Login頁面,那么鑒別成功后將重定向到該應用程序的Default.aspx頁面。 傳給RedirectFromLoginPage()方法的第二參數(shù),用于表示是否只創(chuàng)建當前會話(Session)還是持久化鑒別cookie。如果創(chuàng)建持久化鑒別cookie,那么用戶以后訪問該Web站點時就不需要再次進行登錄。 使用User類 通過Page.User和HttpContext.User屬性可以獲取當前用戶的用戶信息。Page.User屬性公開了Principal對象,該對象支持下列方法:IsInRole——用于檢查某一用戶是否屬于指定的角色中。 例如,如果啟用了Windows集成鑒別,那么就可以使用IsInRole()方法來檢查某一用戶是否屬于特定的微軟Windows組,比如BUILTIN\Administrators中的成員: if ( User.IsInRole("BUILTIN\Administrators") ) { // 執(zhí)行一些只有Administrator才能進行的操作 } 注解 如果角色管理器已啟用,那么使用User.IsInRole()方法在Windows組中做檢查之前,必須對角色管理器進行配置,以使其使用WindowsTokenRoleProvider提供器。 Principal對象還包含了Identity屬性,該屬性可以用來獲取當前用戶的用戶標識信息。Identity對象支持下列三個屬性: AuthenticationType ——用于確定用戶是如何進行鑒別的??赡艿娜≈凳荈orms、Basic和NTLM; IsAuthenticationd——用于確定用戶是否已通過鑒別; Name——用于獲取用戶名。 如果要獲取當前用戶的用戶名,那么可以使用像這樣的邏輯: String name = User.Identity.Name;
如果用戶未通過鑒別,User.Identity.Name屬性將返回空字符串。
|