通行证漫谈(不断补充)
?? ? 提前通行證,首先想到的是,經常用的網易的站內通行證,一處登陸,暢通無阻,怎么樣,很方便吧?
????? 所以,在多系統中,該做法很是盛行,比如在企業級系統應用中。
???? 提個概念,那就是“單點登錄”:
???? 單點登錄(Single Sign On),簡稱為 SSO,是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
是目前比較流行的企業業務整合的解決方案之一。
???? 多說點,其實現機制:
???? 當用戶第一次訪問應用系統1的時候,因為還沒有登錄,會被引導到認證系統中進行登錄;根據用戶提供的登錄信息,認證系統進行身份效驗,如果通過效驗,應該返回給用戶一個認證的憑據--ticket;用戶再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之后會把ticket送到認證系統進行效驗,檢查ticket的合法性。如果通過效驗,用戶就可以在不用再次登錄的情況下訪問應用系統2和應用系統3了。
可以看出,要實現SSO,需要以下主要的功能:
所有應用系統共享一個身份認證系統;
所有應用系統能夠識別和提取ticket信息;
應用系統能夠識別已經登錄過的用戶,能自動判斷當前用戶是否登錄過,從而完成單點登錄的功能。
其中統一的身份認證系統最重要,認證系統的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進行登錄認證;認證成功后,認證系統應該生成統一的認證標志(ticket),返還給用戶。另外,認證系統還應該對ticket進行效驗,判斷其有效性。整個系統可以存在兩個以上的認證服務器,這些服務器甚至可以是不同的產品。認證服務器之間要通過標準的通訊協議,互相交換認證信息,就能完成更高級別的單點登錄。
?? 補充一下:單點登錄的實質就是是含有身份驗證票的Cookie能在項目間共用。?
????? asp.net提供的驗證方法:
???? ASP.NET 的安全認證,共有“Windows”“Form”“Passport”“None”四種驗證模式。
?windows驗證即“IIS驗證”,因為它主要是通過IIS實現的,畢竟用戶請求頁面時,首先遇到的是IIS,之后由IIS交給asp.net應用程序,因為iis賦予的身份由windows用戶定義的,所以又叫windows驗證;
“Windows”與“None”沒有起到保護的作用,不推薦使用;
??? “Form”“Passport” 之間,前者,“Form”驗證用的廣泛一些,重點了解一下。
Form驗證是提交給服務器做的;步驟如下:
1、客戶請求站點被保護的頁面;
2、如果請求沒有包含有效的認證cookie,web服務器將把用戶重定向到web.config文件Authentication標簽的LoginURL屬性指定的URL,該URL提供一個供用戶登錄的表單;
3、認證被輸入到表單中,并通過表單傳送并被提交;
4、如果認證有效,則asp.net程序在本地創建一個認證cookie;
5、之后,用戶被重定向到最初請求的頁面;
認證設置成功之后,以后的請求自動被認證;
認證有效期:關閉瀏覽器或會話結束;
passport驗證是通過訂閱微軟應用程序完成的;
?? (所謂認證的通過與否,其實質就是檢測有無發放有效的Cookie,使用Form也好,運用Passport也罷,都是Cookie在起作用。也就是說,我們只要把有效的Cookie在登錄后一次性發放給客戶端就得了。)
使用Form驗證方法實現單點登錄簡單示例:
一、修改 Web.config
?1、? 打開項目中的Web.config;
?2、? 找到 <authentication mode="Windows" /> 把它改成:
????????????? <authentication mode="Forms">
?<forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms>//Login.aspx為登錄頁面;
?</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>??
二、?編寫 .cs 代碼——登錄與退出?
1、? 登錄代碼:?
a、?? private void Btn_Login_Click(object sender, System.EventArgs e)
????????? {
?????????????? if(this.Txt_UserName.Text=="admin" && this.Txt_Password.Text=="admin")
?????????????? {
???????????????? ???? System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false);
????? }
?}?
b、??private void Btn_Login_Click(object sender, System.EventArgs e)
????????? {
?????????????? if(this.Txt_UserName.Text=="admin" && this.Txt_Password.Text=="admin")?
????????????? {
??????????????????? System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false);?
???? Response.Redirect("Default.aspx");?
???? }
?}
?以上兩種都實現發放驗證后的 Cookie ,通過驗證的重要步驟:?
方法 a) 指驗證后返回登錄前的請求頁面;?
方法 b) 則是分兩步走:通過驗證后就直接發放 Cookie ,跳轉頁面將由程序員自行指定(Response.Redirect("Default.aspx")),此方法多用于 Default.aspx 使用框架結構的系統;
2、? 退出代碼:
private void Btn_LogOut_Click(object sender, System.EventArgs e)
????? {
???????? System.Web.Security.FormsAuthentication.SignOut();?
}
三、如何判斷驗證與否及獲取驗證后的用戶信息
一種方法用 Session 來判斷;
????還有一種方法,且看下面代碼:
if(User.Identity.IsAuthenticated)
? ? ? ?? {
? ? ? ? ? ? ? //你已通過驗證,知道該怎么做了吧?
}
?
?
?
???
轉載于:https://www.cnblogs.com/yhb199/archive/2009/08/01/1536643.html
總結
以上是生活随笔為你收集整理的通行证漫谈(不断补充)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准霍夫变换
- 下一篇: 5SHX0660F0001 IGCT A