iOS登錄模塊有多難?

這邊主要是在公司的項(xiàng)目中遇到的問(wèn)題和一般簡(jiǎn)單的遇到的哪些問(wèn)題和解決方式!

(ps:也不知道為什么,從剛踏上it的編程之路無(wú)論是大學(xué)的項(xiàng)目設(shè)計(jì)還是職業(yè)生涯的web,java,.net,都會(huì)設(shè)計(jì)到登錄有關(guān)的問(wèn)題,但是就僅僅這個(gè)功能的設(shè)計(jì),有淺有深,上下限很大,讓我心中一萬(wàn)只草泥馬奔過(guò))

一 普通登錄

一個(gè)登錄頁(yè)面,輸入賬號(hào)密碼,提交Form表單,后端查詢數(shù)據(jù)庫(kù)對(duì)應(yīng)用戶名的密碼,匹配正確則把用戶記錄到Session,不正確則返回錯(cuò)誤。這種登錄,在上學(xué)的時(shí)候,也許敬愛(ài)的老師就已經(jīng)教過(guò)你了。但可能他沒(méi)有教你的是,密碼需要hash加密,session為什么可以記錄登錄用戶的原理。

密碼hash: 就是存進(jìn)數(shù)據(jù)庫(kù)中的是一串密文,不是明文,加密的過(guò)程是不可逆轉(zhuǎn)的!

在這之前還是需要理解一個(gè)概念:那就是session。

那什么是session呢?它的原理是什么樣的?它的原理大概是醬紫的:服務(wù)器端維護(hù)一個(gè)session的表,這個(gè)表的每一條記錄存的就是與某一個(gè)客戶端的會(huì)話,會(huì)話會(huì)有過(guò)期時(shí)間,過(guò)期的會(huì)話會(huì)被清理。然后這個(gè)會(huì)話,會(huì)有一個(gè)對(duì)應(yīng)的id,一般是一串長(zhǎng)長(zhǎng)的看不懂的字符串,然后這個(gè)字符串會(huì)被存儲(chǔ)在客戶端的cookie中,每一次請(qǐng)求服務(wù)器端都會(huì)帶上這個(gè)cookie,服務(wù)器端就知道訪問(wèn)的就是哪個(gè)客戶端了。

二 獨(dú)立系統(tǒng)的登錄

這個(gè)一般是后臺(tái)的登錄方式: 一個(gè)域名是www.site.com,一個(gè)則是passport.site.com了。要在不同的域名下進(jìn)行登錄,一般的方法是www.site.com/login跳轉(zhuǎn)到passport.site.com/login,passport這邊是一個(gè)登錄頁(yè)面,用戶輸入賬號(hào)密碼登錄成功之后,passport會(huì)通過(guò)帶著一個(gè)可逆加密的包含用戶信息的token,重定向到www.site.com提供的回調(diào)處理地址,然后進(jìn)行解密,匹配正確,則登錄用戶。要注意的是,這里的加密的信息需要包含一個(gè)時(shí)間戳,接收方需要認(rèn)證這個(gè)時(shí)間戳,過(guò)期登錄失敗。避免token被竊取,被無(wú)限登錄site系統(tǒng)。

三 ?單點(diǎn)登錄

單點(diǎn)登錄需要實(shí)現(xiàn)的需求,說(shuō)白了就是在站點(diǎn)A的登錄了,那么用戶就自動(dòng)在站點(diǎn)B、站點(diǎn)C、站點(diǎn)E、F、G登錄。

這又分兩種情況,A站點(diǎn)和B站點(diǎn)是否在同一個(gè)二級(jí)域名下。

假如是在同一個(gè)域名下,例如siteA.site.com與siteB.site.com,因?yàn)閏ookie允許設(shè)置到二級(jí)域名下.site.com,所以siteA和siteB是可以共享cookie的,用戶的信息可以通過(guò)可逆加密放在二級(jí)域名下的cookie,并且設(shè)置http only,就可以一站登錄,站站登錄。

而如果A站點(diǎn)和B站點(diǎn)不在同一二級(jí)域名下,例如www.siteA.com與www.siteB.com,他們就無(wú)法通過(guò)共享cookie的方式共享用戶信息,所以需要用到j(luò)sonp的方式,用戶在siteA登錄之后,提供一個(gè)jsonp接口獲取加密的用戶信息,siteB訪問(wèn)這個(gè)jsonp獲取加密信息。達(dá)到共享用戶狀態(tài)的效果。

其實(shí)還有一種方式:重定向的方式

四 OAuth2.0登錄

第三方登錄都是實(shí)現(xiàn)了OAuth2.0協(xié)議的,流程大概是醬紫的:

第三方提供一個(gè)登錄入口,也就是第三方域名下的登錄頁(yè)面。主站需要登錄的時(shí)候,引導(dǎo)用戶重定向到第三方的登錄頁(yè)面,用戶輸入賬號(hào)密碼之后,登錄第三方系統(tǒng),第三方系統(tǒng)匹配帳號(hào)成功之后,帶上一個(gè)code到主站的回調(diào)地址,主站接收到code,短時(shí)間內(nèi)拿著code請(qǐng)求第三方提供獲取長(zhǎng)期憑證的接口(因?yàn)閏ode有一個(gè)比較短的過(guò)期時(shí)間),這個(gè)長(zhǎng)期憑證叫access_token,獲取之后就把這個(gè)access_token存到數(shù)據(jù)庫(kù)中,請(qǐng)求一些第三方提供的API,需要用到這個(gè)access_token,因?yàn)檫@個(gè)token就是記錄用戶在第三方系統(tǒng)的一個(gè)身份憑證。一些系統(tǒng),在獲取access_token的時(shí)候,還會(huì)返回一個(gè)副參數(shù)refresh_token,因?yàn)閍ccess_token是有過(guò)期時(shí)間的,一旦過(guò)期了,主站可以使用refresh_token請(qǐng)求第三方提供的接口獲取新的access_token以及新的refresh_token。

這里講一下授權(quán)的思路:

1 ?客戶端向資源所有者發(fā)送授權(quán)請(qǐng)求,客戶端的身份信息,請(qǐng)求資源路徑,對(duì)數(shù)據(jù)的操作方法

2 資源所有者批準(zhǔn)授權(quán),發(fā)送給客戶端,不批準(zhǔn)就拒絕授權(quán)信息

3 客戶端向授權(quán)服務(wù)器發(fā)送授權(quán)認(rèn)證

4 確認(rèn)認(rèn)證后,發(fā)送accesstoken

5 客戶端在accesstoken有效期間向資源所有者請(qǐng)求有效資源

6 確定accesstoken 有效性和真實(shí)性后,提供相應(yīng)的操作

以下是我自己在xmind中畫的大致理解:

未完待續(xù)!?。。。。。。。。。。。。。。。。。。。?/div>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡(jiǎn)稱cookie)是網(wǎng)...
    留七七閱讀 18,377評(píng)論 2 71
  • 也不知道是什么原因,剛開(kāi)始不久的職業(yè)生涯,在技術(shù)這條路走著走著,和「登錄」總是有著一個(gè)不解之緣。還記得當(dāng)初學(xué)習(xí)We...
    JC_Huang閱讀 1,708評(píng)論 6 29
  • 登錄介紹好文,轉(zhuǎn)載推薦 也不知道是什么原因,剛開(kāi)始不久的職業(yè)生涯,在技術(shù)這條路走著走著,和「登錄」總是有著一個(gè)不解...
    翻滾的前端程序員閱讀 271評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,540評(píng)論 19 139
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,261評(píng)論 0 51

友情鏈接更多精彩內(nèi)容