Asp.net的身份驗證有有三種,分別是"Windows | Forms | Passport",其中又以Forms驗證用的最多,也最靈活。
Forms 驗證方式對基於用戶的驗證授權提供了很好的支持,可以通過一個登錄頁面驗證用戶的身份,將此用戶的身份發回到客戶端的Cookie,之后此用戶再訪問這個 web應用就會連同這個身份Cookie一起發送到服務端。服務端上的授權設置就可以根據不同目錄對不同用戶的訪問授權進行控制了。
問題來了,在實際是用中我們往往需要的是基於角色,或者說基於用戶組的驗證和授權。對一個網站來說,一般的驗證授權的模式應該是這樣的:根據實際需 求把用戶分成不同的身份,就是角色,或者說是用戶組,驗證過程不但要驗證這個用戶本身的身份,還要驗證它是屬於哪個角色的。而訪問授權是根據角色來設置 的,某些角色可以訪問哪些資源,不可以訪問哪些資源等等。要是基於用戶來授權訪問將會是個很不實際的做法,用戶有很多,還可能隨時的增減,不可能在配置文 件中隨時的為不斷增加的新用戶去增加訪問授權的。
下面大概的看一下Forms的過程。
一、web.config配置
<authentication mode="Forms"> <!--默認狀態下為Windows--> <forms name="myTeacher" loginUrl="~/pw_admin/Login.aspx" defaultUrl="pw_admin/Default.aspx" protection="All" path="pw_admin/" timeout="30"></forms> <!--未通過則轉向Login.aspx登錄頁--> </authentication>
二、在admin文件夾下新建一個web.config文件,並加入以下代碼
<system.web> <!--拒絕匿名用戶訪問此目錄下的任何文件--> <authorization> <deny users="?"/> </authorization> </system.web>
有事需要允許訪問admin目錄下js,css等文件,可以在web.config加入如下代碼
<location path="css/"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>
三、在根目錄下,創建Login.aspx登陸頁面(可不是在admin目錄下哦),加兩個textbox控件和一個botton控件,分別是用戶名,密碼,和登陸按鈕
雙擊登陸按鈕,在其登陸方法里寫上:
protected void btn_Login_Click(object sender, EventArgs e) { if (TextBox1.Text == "admin" && TextBox2.Text == "fenghua17173") { //“通知”表單驗證,該用戶名已經通過身份驗證 FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, true); } else { Response.Write("<script>alert('賬號或密碼有誤,登錄失敗!');</script>"); } }
四、退出或注銷
protected void btn_Logout_Click(object sender, EventArgs e) { //刪除用戶票據 FormsAuthentication.SignOut(); //重新定向到登陸頁面 FormsAuthentication.RedirectToLoginPage(); }