也談Asp.net 中的身份驗證

iDotNetSpace發表於2010-12-09

這篇博文,是從初學者的角度補充了一些基礎的概念,以便能有個清晰的認識。

一、配置安全身份驗證模式

在Web.config 檔案中,通過 節可以配置 ASP.NET 使用的安全身份驗證模式,以標識傳入的使用者。

 <authentication mode="[Windows|Forms|Passport|None]">
<forms>...forms>
<passport/>
authentication>

節的mode 為必選的屬性。指定應用程式的預設身份驗證模式。

此屬性可以為下列值之一:

○  Windows :將 Windows 驗證指定為預設的身份驗證模式。將它與以下任意形式的 Microsoft Internet 資訊服務 (IIS) 身份驗證結合起來使用:基本、摘要、整合 Windows 身份驗證 (NTLM/Kerberos) 或證書。在這種情況下,您的應用程式將身份驗證責任委託給基礎 IIS。

○  Forms :將 ASP.NET 基於窗體的身份驗證指定為預設身份驗證模式。

○  Passport :將 Microsoft Passport Network 身份驗證指定為預設身份驗證模式。

○  None :不指定任何身份驗證。您的應用程式僅期待匿名使用者,否則它將提供自己的身份驗證。

預設值為 Windows

二、設定基於窗體的身份驗證

當ASP.NET 基於窗體的身份驗證 時,其 子節點為窗體自定義身份驗證配置。

示例如下:

<authentication mode="Forms">
<forms cookieless="UseDeviceProfile"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
name="cnblogs"
slidingExpiration="false"
timeout="15"
/>
authentication>

○  cookieless :定義是否使用 Cookie 以及 Cookie 的行為。預設值為 UseDeviceProfile ;

○  defaultUrl :定義在身份驗證之後用於重定向的預設 URL。預設值為 default.aspx ;

○  loginUrl :指定如果找不到任何有效的身份驗證 Cookie,將請求重定向到的用於登入的 URL。預設值為 login.aspx ;

○  name :指定要用於身份驗證的 HTTP Cookie。預設值為 ".ASPXAUTH" ;

             如果正在一臺伺服器上執行多個應用程式,並且每個應用程式都需要唯一的Cookie,則必須在每個應用程式的 Web.config 檔案中配置 Cookie 名稱。

○  slidingExpiration :指定是否啟用彈性過期時間。

       > True 指定啟用彈性過期時間。在單個會話期間,身份驗證 Cookie 被重新整理,並且每個後續請求的到期時間被重置。在 .NET Framework 1.x 版中,預設值為 True

       >  False 指定不啟用可調過期,並指定 Cookie 在最初發出之後,經過一段設定的時間間隔後過期。在 .NET Framework 2.0 版中,預設值為 False

○  timeout :指定 Cookie 過期前逝去的時間(以整數分鐘為單位)。如果 SlidingExpiration 屬性為 true,則 timeout 屬性是滑動值,會在接收到上一個請求之後的指定時間(以分鐘為單位)後過期。為防止危及效能並避免向開啟 Cookie 警告的使用者發出多個瀏覽器警告,當指定的時間逝去大半時將更新 Cookie。這可能導致精確性受損。永續性 Cookie 不超時。預設值為 "30"(30 分鐘)。

三、配置 Web 應用程式的授權

接下來新增 節配置 Web 應用程式的授權,以控制客戶端對 URL 資源的訪問。

<authorization>
<allow ...="" />
<deny ...="" />
authorization>

授權:順序是先寫allow,再寫deny,不然就會出現問題。

allow :向授權規則對映新增一個規則,該規則允許對資源進行訪問。

deny :向授權規則對映新增一條拒絕對資源的訪問的授權規則。

示例如下:

<authorization>
<deny users="?" />
authorization>

  表示拒絕訪問的使用者。問號 (?) 表示拒絕匿名使用者;星號 (*) 表示拒絕所有使用者訪問。若新增使用者名稱列表使用逗號分隔。

設定完畢後,Web.config 檔案的整體配置如下:

<!--
通過  節可以配置 ASP.NET 使用的
安全身份驗證模式,以標識傳入的使用者。
--&gt
<authentication mode="Forms">
<forms cookieless="UseDeviceProfile"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
name="newerSize"
slidingExpiration="false"
timeout="15"
/>
authentication>
<!-- 授權:順序是先寫allow,再寫deny,不然就會出現問題。 --&gt
<authorization>
<deny users="?"/>
authorization>

四、在頁面程式中使用Forms 身份驗證

在頁面程式的後臺程式碼中,我們使用FormsAuthentication 類為Web 應用程式管理 Forms 身份驗證服務。

在登入頁面Login.aspx 中,程式碼如下:

//登入
protected void btnLogin_Click(object sender, EventArgs e)
{
string name = txtName.Text.Trim();
string pwd = txtPwd.Text.Trim();
if ("Andy" == name && "123" == pwd)
{
//方式一
//FormsAuthentication.RedirectFromLoginPage(name, true);
/*引數二為true:表示建立持久 Cookie(跨瀏覽器會話儲存的 Cookie)*/
//方式二
//為使用者建立一個票證,並將其放入cookie或者url中(具體看你怎麼設定票證的儲存方式)
FormsAuthentication.SetAuthCookie(name, true);
Response.Redirect("Default.aspx");
}
else
{
Response.Write("
alert('登入失敗!')
"
); } } //登出 protected void btnExit_Click(object sender, EventArgs e) { //從瀏覽器刪除 Forms 身份驗證票證。 FormsAuthentication.SignOut(); }

 

登入成功後,跳轉到的預設頁面Default.aspx 中,程式碼如下:

protected void Page_Load(object sender, EventArgs e)
{
//User:獲取有關發出頁請求的使用者的資訊。
string username = User.Identity.Name;
Label1.Text = username + ":登入成功!";
}

User.Identity.Name 用於獲得Cookie 中的使用者名稱。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-681360/,如需轉載,請註明出處,否則將追究法律責任。

相關文章