小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

FormsAuthentication使用指南

 小辰811 2016-03-06

配置安全鑒別

鑒別是指鑒定來訪用戶是否合法的過程。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屬性將返回空字符串。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多