Step1帐户登录系统(0.整体思路)
??????? 我一直想做一個帳戶登錄系統(tǒng),到今天,終于做出了一個雛形,非常高興,因此,我會在下面的幾篇文章對這個系統(tǒng)進(jìn)行詳細(xì)的介紹,這是第一篇,介紹一下整體思路,到后面,基本上就是以代碼為主了,先看個截圖:
??????? 這個系統(tǒng)起源于單點(diǎn)登錄系統(tǒng)(實(shí)際上它本身也是一個單點(diǎn)登錄系統(tǒng)),這個技術(shù)現(xiàn)在在互聯(lián)網(wǎng)上使用的十分廣泛了,畢竟,無論是大的還是小的網(wǎng)站,是否有多個域名,都可太可能為每個欄目來設(shè)計(jì)一個單獨(dú)的登錄系統(tǒng),等不可能讓用戶在每個欄目都去輸入帳號密碼,下面我粗略的圖解一下單點(diǎn)登錄系統(tǒng)(這篇文章之中提到的登錄都應(yīng)該兼容跨域名之間的接口的,如果在同一個域名內(nèi),將會容易得多)
??????? 以上這個圖只是一個登錄流程的順序圖,按照這個圖,我們一步一步看一下:
??????? 1.用戶要求進(jìn)行某一操作;
??????? 2.Web欄目通過自身的Cookie或Session判斷用戶是否已經(jīng)登錄,如果已經(jīng)登錄,則直接處理,否則,將用戶導(dǎo)向到登錄系統(tǒng),并附帶上參數(shù)通知登錄系統(tǒng)在登錄完成之后返回到哪一個頁面;
??????? 3.登錄系統(tǒng)通過Cookie或Session判斷用戶是否已經(jīng)登錄,如果已經(jīng)登錄,則直接將用戶跳轉(zhuǎn)回欄目,并附帶用戶的帳戶信息,如果沒有登錄,則提示用戶登錄;
??????? 4.用戶輸入帳戶密碼;
??????? 5.登錄系統(tǒng)記錄判斷用戶登錄是否正常,然后先設(shè)置自己的Cookie或Session,再使用用戶的帳戶信息跳轉(zhuǎn)到對應(yīng)的欄目;
??????? 6.欄目收到跳轉(zhuǎn)回來的請求之后,先驗(yàn)證請求,然后設(shè)置自己的Cookie,再根據(jù)用戶的帳戶信息向用戶返回內(nèi)容。
??????? 本來這些文字描述都可以直接直觀的畫在圖上的,不過我的發(fā)現(xiàn)機(jī)器上沒有工具,連Word都沒有,只好隨便用畫圖畫了一幅,不過因?yàn)榇蠹覍吸c(diǎn)登錄應(yīng)該都很了解,因此,肯定會跳過不看,也就無所謂了。
??????? 我并不是要做一個單點(diǎn)登錄系統(tǒng),我主要是想,現(xiàn)在的網(wǎng)站,無論大小,都有一個注冊、登錄什么的,對用戶造成很大的困擾,用戶不可能去記那么多帳號密碼的,對網(wǎng)站來講,維護(hù)用戶的數(shù)據(jù)也是一個很難的問題,因此,如果網(wǎng)站能夠相互公用用戶信息,讓用戶的一個密碼在多個網(wǎng)站都可以登錄,這是一個皆大歡喜的事情。這個思路,實(shí)際上就是傳說中的OpenId,我之所以沒有去專門研究OpenId,是因?yàn)楝F(xiàn)在國內(nèi)知道的人很少,而且OpenId還是有一定的局限性,我仔細(xì)的研究了各個大的網(wǎng)站提供的對外接口(國內(nèi)的很少,基本都是國外的),決定寫一個基于多種網(wǎng)站用戶來源的單點(diǎn)登錄系統(tǒng),這就是剛才看到的Step1帳戶登錄系統(tǒng).
??????? 其實(shí),總體原理非常簡單(因?yàn)樯厦娴哪欠鶊D畫起來很費(fèi)勁,這里就不想再畫圖了),只要想象上圖之中的Passport服務(wù)器同時(shí)又是另外一個或多個其他Passport服務(wù)器的客戶端,就會覺得一切都容易起來:這個Passport服務(wù)器先作為Google,Live,Yahoo等網(wǎng)站的帳戶服務(wù)的客戶端,將這個服務(wù)都整合在一起,然后作為一個統(tǒng)一的Passport提供給自身的一個或多個網(wǎng)站的欄目。
??????? 例如,參照如下流程:
??????? 1.用戶打開http://www.dituren.cn/ ,并點(diǎn)擊右上角的“登錄”;
??????? 2.頁面會轉(zhuǎn)向到http://account.step1.cn/account/login.aspx ,開始進(jìn)行登錄,也就是文章開頭看到的那張圖片;
??????? 3.在頁面上顯示了多種帳戶來源類型,用戶選擇自己有帳號的一種(以Google為例);
?4.帳戶服務(wù)器會將用戶轉(zhuǎn)向到Google的登錄頁面(此接口由Google Accounts Authentication 提供);
??????? 5.Google會首先讓用戶輸入帳號密碼,然后出現(xiàn)一個頁面提示用戶第三方網(wǎng)站正在請求帳戶信息,請用戶確認(rèn);
??????? 6.用戶確認(rèn)后,則Google會返回到一個頁面,這個頁面URL是在第4步的時(shí)候隨參數(shù)發(fā)送給Google的;
??????? 7.在這個頁面上接收Google傳遞的參數(shù),寫入到Cookie,然后將用戶再次轉(zhuǎn)向到最終欄目頁面;
??????? 8.欄目寫入Cookie,整個登錄過程完成。
??????? 這個過程所起來比單點(diǎn)登錄難不了多少,不過最大的問題在于這些網(wǎng)站提供的帳戶服務(wù)互不相同,而且文檔并不是很健全,目前研究這個服務(wù)的人又不多(國內(nèi)更加少了),因此開發(fā)的時(shí)候不停的遇到很多很郁悶的問題(至今我都沒有使用Google的OAuth成功登錄,后來只好用AuthSub),因?yàn)椴煌5挠龅揭恍┬栴}而且沒有代碼參考,心情十分郁悶,在最郁悶的時(shí)候,我決定將這所有的代碼都整個公開提供下載,以減少還有別的同樣對這個感興趣的人研究的時(shí)候走的彎路。
??????? 我會首先順序次在博客上貼出每一個網(wǎng)站的帳戶接口的詳細(xì)使用和代碼,等到這個服務(wù)完善之后,就將整個源碼提供下載。
??????? 預(yù)覽地址是http://account.step1.cn/account/login.aspx ,目前就能登錄,登錄之后什么都不能做,呵呵!
??????? 閉關(guān)說明:本來這個文章應(yīng)該是叫“閉關(guān)紀(jì)要6”的,不過因?yàn)檫@次研究的東西會自成一個系列,而且本身會專業(yè)一點(diǎn),不適合采用一個太不專業(yè)的名稱,因此,沒有采用,不過,編號還是被保留,因?yàn)槲易罱K還是要記錄閉關(guān)期間的研究成果的。
總結(jié)
以上是生活随笔為你收集整理的Step1帐户登录系统(0.整体思路)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更新 PORTS-Tree 且升级已安装
- 下一篇: Windows SharePoint S