代碼寫 n 久了,總想寫得別的。這不,上頭說在整合兩個項目,做成單一登錄(single sign on),也有人稱之為“單點登錄”。查閱相關文檔后,終于實現(xiàn)了,現(xiàn)在把它拿出來與大家一起分享。或許大家會問:“這與標題不符呀?”別急,在下筆之前,我腦子里想到了我剛使用 form 認證時遇到的一些問題,以及使用過程用到的一些技巧(實乃投機取巧是也 ' )。偶打初中那時,語文水平就不怎么滴,考試常常作文寫不出來,所以寫作水平有限,還請大家海量。對了,本人不僅寫作水平有限,編程能力也不是很好,此文供大家學習交流之用,歡迎廣大勞苦群眾拎著雞蛋、捧著鮮花前來評論。轉載請注明原創(chuàng)作者乃寒羽楓是也,不甚感激!
廢話也說的差不多了,言歸正傳, asp.net 的安全認證,共有“windows”“form”“passport”“none”四種驗證模式。“windows”與“none”沒有起到保護的作用,不推薦使用;“passport”我又沒用過,唉……所以我只好講講“form”認證了。我打算分三部分:
第一部分 —— 怎樣實現(xiàn)from 認證;
第二部分 —— form 認證的實戰(zhàn)運用;
第三部分 —— 實現(xiàn)單點登錄(single sign on)
第一部分 如何運用 form 表單認證
一、 新建一個測試項目
為了更好說明,有必要新建一個測試項目(暫且為“formtest”吧),包含三張頁面足矣(default.aspx、login.aspx、userinfo.aspx)。啥?有人不會新建項目,不會新增頁面?你問我咋辦?我看這么辦好了:拖出去,打回原藉,從幼兒園學起……
二、 修改 web.config
1、 雙擊項目中的web.config(不會的、找不到的打 pp)
2、 找到下列文字 <authentication mode="windows" /> 把它改成:
<authentication mode="forms">
<forms loginurl="login.aspx" name=".aspxauth"></forms>
</authentication>
3、 找到<authorization> <allow users="*" /></authorization>換成
<authorization><deny users="?"></deny></authorization>
 
 
這里沒什么好說的,只要拷貝過去就行。雖說如此,但還是有人會弄錯,如下: 
<authentication mode="forms">
<forms loginurl="login.aspx" name=".apsx"></forms>
<deny users="?"></deny>
</authentication>
若要問是誰把 <deny users="?"></deny> 放入 <authentication> 中的,我會很榮幸地告訴你,那是 n 年前的我:<authentication> 與 <authorization> 都是以 auth 字母開頭又都是以 ation 結尾,何其相似;英文單詞背不下來的我以為他們是一伙的……
三、 編寫 .cs 代碼——登錄與退出
1、 登錄代碼:
a、 書本上介紹的
private void btn_login_click(object sender, system.eventargs e)
{
if(this.txt_username.text=="admin" && this.txt_password.text=="123456")
{
system.web.security.formsauthentication.redirectfromloginpage(this.txt_username.text,false);
}
}
b、 偶找了 n 久才找到的
private void btn_login_click(object sender, system.eventargs e)
{
if(this.txt_username.text=="admin" && this.txt_password.text=="123456")
{
system.web.security.formsauthentication.setauthcookie(this.txt_username.text,false);
response.redirect("default.aspx");
}
}
以上兩種都可發(fā)放驗證后的 cookie ,即通過驗證,區(qū)別:
方法 a) 指驗證后返回請求頁面,俗稱“從哪來就打哪去”。比如:用戶沒登錄前直接在 ie 地址欄輸入 http://localhost/formtest/userinfo.aspx ,那么該用戶將看到的是 login.aspx?returnurl=userinfo.aspx ,輸入用戶名與密碼登錄成功后,系統(tǒng)將根據(jù)“returnurl”的值,返回相應的頁面
方法 b) 則是分兩步走:通過驗證后就直接發(fā)放 cookie ,跳轉頁面將由程序員自行指定,此方法多用于 default.aspx 使用框架結構的系統(tǒng)。
 
 
2、  退出代碼: 
private void btn_logout_click(object sender, system.eventargs e)
{
system.web.security.formsauthentication.signout();
}
四、 如何判斷驗證與否及獲取驗證后的用戶信息
有的時候,在同一張頁面需要判斷用戶是否已經(jīng)登錄,然后再呈現(xiàn)不同的布局。有人喜歡用 session 來判斷,我不反對此類做法,在此我只是想告訴大家還有一種方法,且看下面代碼:
if(user.identity.isauthenticated)
{
//你已通過驗證,知道該怎么做了吧?
}
user.identity 還有兩個屬性authenticationtype(驗證類型)與 name(用戶名稱) ,大家要注意的是 name 屬性,此處的user.identity.name將得到,驗證通過(redirectfromloginpage 或setauthcookie)時,我們帶入的第一個參數(shù) this.txt_username.text 。這個參數(shù)很重要,關系到種種……種種的情況,何出此言,且聽下回分解……
asp.net 安全認證(二)—— 靈活運用 form 表單認證中的 deny 與 allow 及保護 .htm 等文件
我閃先
新聞熱點
疑難解答
圖片精選