轉帖|其它|編輯:郝浩|2011-03-15 13:36:12.000|閱讀 577 次
概述:ASP.NET中身份驗證有三種方式,分別是Windows、Forms和 Passport,Windows驗證基于窗體驗證,需要每個頁面寫上驗證身份代碼,相對靈活,但操作過于復雜;Passport使用由微軟提供的集中身 份驗證方式,安全性較高,但實現(xiàn)較復雜。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
ASP.NET中身份驗證有三種方式,分別是Windows、Forms和Passport,Windows驗證基于窗體驗證,需要每個頁面寫上驗證身份代碼,相對靈活,但操作過于復雜;Passport使用由微軟提供的集中身 份驗證方式,安全性較高,但實現(xiàn)較復雜。最適合中小型項目的就是基于Forms的身份驗證,它將所定義的文件和目錄集中到一個頁面去做驗證,將用戶的身份 發(fā)回寫到客戶端的Cookie,在Cookie未過期的時間段內(nèi)用戶再次訪問網(wǎng)站,就會連同身份Cookie發(fā)送到服務器端,服務端的授權設置可以根據(jù)不 同目錄不同用戶進行控制了。它的權限模型為用戶——角色模型,能滿足絕大多數(shù)應用場景。
無角色場景實現(xiàn)
應用場景中所有用戶都擁有全部權限,此時就只有一個角色,或者認為沒有角色,這樣只需要驗證cookie是否存在即可。以下將一步一步實現(xiàn)該應用。
首先建立網(wǎng)站項目,修改Web.config:
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true">
</compilation>
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="~/login.aspx" protection="All"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
這里注意authetication段為配置身份驗證方式,loginUrl為默認驗證頁,直接訪問其它頁會返回到此頁進行身份驗證。name屬性值為cookie名稱。另外它還擁有以下屬性:
cookieless:定義是否使用Cookie及Cookie的行為。UserCookies指定無論在任何設備上都使用Cookie;UseUri指定從不使用Cookie;AutoDetect指自適應設備使用;UseDeviceProfile指定適應瀏覽器支持Cookie。
defaultUrl:定義在身份驗證后重定向的默認URL。
timeout:指定Cookie過期時間。
domain:指定Cookie所在域,要知道Cookie是不能跨域的。
Protection:設置為 All,以指定窗體身份驗證票的保密性和完整性。這導致使用 machineKey 元素上指定的算法對身份驗證票證進行加密,并且使用同樣是 machineKey 元素上指定的哈希算法進行簽名。
使用authorizaion元素配置用戶授權模型,使用allow元素存儲允許訪問的用戶和角色,使用deny元素存儲拒絕訪問的用戶和角色。分別使用users、roles和verbs來控制用戶、角色及HTTP傳輸方法。如:
<authorization>
<allow users="user1,user2,user3" roles="admin,submitter" verbs="GET,HEAD,POST,DEBUG" />
<deny users="user4" roles="guest" verbs="" />
</authorization>
表示授權user1,user2,user3訪問,不允許user4訪問,訪問角色權限為admin和submitter,允許行為為GET四種。我們這里使用user="?"代表所有用戶。
建立login.aspx,頁面布局如下:
驗證身份及寫入Cookie代碼如下:
if (txtName.Text.Equals(userName) && txtPassword.Text.Equals(userPassword)) {
//創(chuàng)建票據(jù)
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddDays(30), true, userName + "," + userPassword);
//加密票據(jù)
string authTicket = FormsAuthentication.Encrypt(ticket);
//存儲為cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, authTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
Response.Redirect("index.aspx");
}
這樣Cookie就寫入了客戶端,用戶訪問其他頁面,如果檢測到Cookie不存在就會跳轉到login.aspx這個頁面進行驗證。
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網(wǎng)絡轉載