也談ASP.NET 中的身份驗證

作者: 鋼鋼  來源: 博客園  發布時間: 2010-12-26 22:09  閱讀: 2634 次  推薦: 2   原文鏈接   [收藏]  

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

  在Web.config 文件中,通過 <authentication> 節可以配置 ASP.NET 使用的安全身份驗證模式,以標識傳入的用戶。

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

  <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> 子節點為窗體自定義身份驗證配置。

示例如下:

<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 應用程序的授權

  接下來添加<authorization> 節配置 Web 應用程序的授權,以控制客戶端對 URL 資源的訪問。

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

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

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

  deny :向授權規則映射添加一條拒絕對資源的訪問的授權規則。

示例如下:

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

  <deny  users="?" />  表示拒絕訪問的用戶。問號 (?) 表示拒絕匿名用戶;星號 (*) 表示拒絕所有用戶訪問。若添加用戶名列表使用逗號分隔。

  設置完畢后,Web.config 文件的整體配置如下:

<!--
通過 <authentication> 節可以配置 ASP.NET 使用的
安全身份驗證模式,以標識傳入的用戶。
-->
<authentication mode="Forms">
<forms cookieless="UseDeviceProfile"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
name="newerSize"
slidingExpiration="false"
timeout="15"
/>
</authentication>
<!-- <authorization>授權:順序是先寫allow,再寫deny,不然就會出現問題。 -->
<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("<script>alert('登錄失敗!')</script>");
}
}
//注銷
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 中的用戶名。

2
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()