app的登錄認證與安全

轉(zhuǎn)載

一、登錄機制

粗略地分析睛挚, 登錄機制主要分為登錄驗證邪蛔、登錄保持、登出三個部分扎狱。登錄驗證是指客戶端提供用戶名和密碼侧到,向服務(wù)器提出登錄請求勃教,服務(wù)器判斷客戶端是否可以登錄并向客戶端確認。 登錄認保持是指客戶端登錄后匠抗, 服務(wù)器能夠分辨出已登錄的客戶端故源,并為其持續(xù)提供登錄權(quán)限的服務(wù)器。登出是指客戶端主動退出登錄狀態(tài)汞贸。容易想到的方案是绳军,客戶端登錄成功后, 服務(wù)器為其分配sessionId, 客戶端隨后每次請求資源時都帶上sessionId著蛙。

1.1 登錄驗證

上述簡易的登錄驗證策略存在明顯的安全漏洞,需要優(yōu)化猎唁。

1.1.1 密碼的傳輸

客戶端第一次發(fā)出登錄請求時帐偎, 用戶密碼以明文的方式傳輸豁生, 一旦被截獲芍殖, 后果嚴重。因此密碼需要加密,例如可采用RSA非對稱加密蒂窒。具體流程如下:

  • 客戶端向服務(wù)器第一次發(fā)起登錄請求(不傳輸用戶名和密碼)纬凤。
  • 服務(wù)器利用RSA算法產(chǎn)生一對公鑰和私鑰。并保留私鑰蜻底, 將公鑰發(fā)送給客戶端脱惰。
  • 客戶端收到公鑰后良蛮, 加密用戶密碼, 向服務(wù)器發(fā)起第二次登錄請求(傳輸用戶名和加密后的密碼)。
  • 服務(wù)器利用保留的私鑰對密文進行解密,得到真正的密碼泻仙。

1.1.2 登錄狀態(tài)token

再仔細核對上述登錄流程究抓, 我們發(fā)現(xiàn)服務(wù)器判斷用戶是否登錄橘茉, 完全依賴于sessionId, 一旦其被截獲构挤, 黑客就能夠模擬出用戶的請求矾飞。于是我們需要引入token的概念: 用戶登錄成功后, 服務(wù)器不但為其分配了sessionId, 還分配了token巷蚪, token是維持登錄狀態(tài)的關(guān)鍵秘密數(shù)據(jù)。在服務(wù)器向客戶端發(fā)送的token數(shù)據(jù)啸臀,也需要加密每聪。于是一次登錄的細節(jié)再次擴展穷娱。

  • 客戶端向服務(wù)器第一次發(fā)起登錄請求(不傳輸用戶名和密碼)篓叶。
  • 服務(wù)器利用RSA算法產(chǎn)生一對公鑰和私鑰。并保留私鑰锥腻, 將公鑰發(fā)送給客戶端幸斥。
  • 客戶端收到公鑰后经窖, 加密用戶密碼搬泥,向服務(wù)器發(fā)送用戶名和加密后的用戶密碼芭碍; 同時另外產(chǎn)生一對公鑰和私鑰孽尽,自己保留私鑰, 向服務(wù)器發(fā)送公鑰窖壕; 于是第二次登錄請求傳輸了用戶名和加密后的密碼以及客戶端生成的公鑰。
  • 服務(wù)器利用保留的私鑰對密文進行解密杉女,得到真正的密碼瞻讽。 經(jīng)過判斷, 確定用戶可以登錄后熏挎,生成sessionId和token速勇, 同時利用客戶端發(fā)送的公鑰,對token進行加密坎拐。最后將sessionId和加密后的token返還給客戶端烦磁。
  • 客戶端利用自己生成的私鑰對token密文解密养匈, 得到真正的token。

1.2 登錄保持

在最原始的方案中都伪, 登錄保持僅僅靠服務(wù)器生成的sessionId: 客戶端的請求中帶上sessionId, 如果服務(wù)器的redis中存在這個id呕乎,就認為請求來自相應的登錄客戶端。 但是只要sessionId被截獲陨晶, 請求就可以為偽造猬仁, 存在安全隱患。

引入token后先誉,上述問題便可得到解決湿刽。 服務(wù)器將token和其它的一些變量, 利用散列加密算法得到簽名后褐耳,連同sessionId一并發(fā)送給服務(wù)器叭爱; 服務(wù)器取出保存于服務(wù)器端的token,利用相同的法則生成校驗簽名, 如果客戶端簽名與服務(wù)器的校驗簽名一致漱病, 就認為請求來自登錄的客戶端买雾。

1.3 TOKEN失效
用戶登錄出系統(tǒng)

失效原理:
在服務(wù)器端的redis中刪除相應key為session的鍵值對。





App登陸保存數(shù)據(jù)流程

App因為要實現(xiàn)自動登陸功能杨帽,所以必然要保存一些憑據(jù)漓穿,所以比較復雜。

App登陸要實現(xiàn)的功能:

  • 密碼不會明文存儲注盈,并且不能反編繹解密晃危;
  • 在服務(wù)器端可以控制App端的登陸有效性,防止攻擊者拿到數(shù)據(jù)之后老客,可以長久地登陸僚饭;
  • 用戶如果密碼沒有泄露,不用修改密碼就可以保證安全性胧砰;
  • 可以區(qū)分不同類型的客戶端安全性鳍鸵;比如Android用戶受到攻擊,只會讓Android用戶的登陸失效尉间,IOS用戶不受影響偿乖。

App第一次登陸流程:

  • 用戶輸入密碼,App把這些信息用RSA公鑰加密:(用戶名,密碼,時間,mac,隨機數(shù))哲嘲,并發(fā)送到服務(wù)器贪薪。
  • 服務(wù)器用RSA私鑰解密,判斷時間(可以動態(tài)調(diào)整1天到7天)眠副,如果不在時間范圍之內(nèi)画切,則登陸失敗。如果在時間范圍之內(nèi)囱怕,再調(diào)用coreservice判斷用戶名和密碼霍弹。

這里判斷時間毫别,主要是防止攻擊者截取到加密串后,可以長久地利用這個加密串來登陸庞萍。

  • 如果服務(wù)器判斷用戶成功登陸拧烦,則用AES加密:(隨機salt,用戶名,客戶端類型,時間)忘闻,以(用戶名+Android/IOS/WP)為key钝计,存到緩存里。再把加密結(jié)果返回給客戶端齐佳。
  • 客戶端保存服務(wù)器返回的加密串

App自動登陸的流程:

  • App發(fā)送保存的加密串到服務(wù)器私恬,(加密串,用戶名炼吴,mac本鸣,隨機數(shù))==>RSA公鑰加密
  • 服務(wù)器用RSA私鑰解密,再用AES解密加密串硅蹦,判斷用戶名是否一致荣德。如果一致,再以(用戶名+Android/IOS/WP)為key到緩存里查詢童芹。如果判斷緩存中的salt值和客戶端發(fā)送過來的一致涮瞻,則用戶登陸成功。否則登陸失敗假褪。

不用AES加密署咽,用RSA公鑰加密也是可以的。AES速度比RSA要快生音,RSA只能存儲有限的數(shù)據(jù)宁否。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缀遍,隨后出現(xiàn)的幾起案子慕匠,更是在濱河造成了極大的恐慌,老刑警劉巖域醇,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件絮重,死亡現(xiàn)場離奇詭異,居然都是意外死亡歹苦,警方通過查閱死者的電腦和手機青伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殴瘦,“玉大人狠角,你說我怎么就攤上這事◎揭福” “怎么了丰歌?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵姨蟋,是天一觀的道長。 經(jīng)常有香客問我立帖,道長眼溶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任晓勇,我火速辦了婚禮堂飞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绑咱。我一直安慰自己绰筛,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布描融。 她就那樣靜靜地躺著铝噩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窿克。 梳的紋絲不亂的頭發(fā)上骏庸,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音年叮,去河邊找鬼具被。 笑死,一個胖子當著我的面吹牛谋右,可吹牛的內(nèi)容都是我干的硬猫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼改执,長吁一口氣:“原來是場噩夢啊……” “哼啸蜜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辈挂,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤衬横,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后终蒂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜂林,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年拇泣,在試婚紗的時候發(fā)現(xiàn)自己被綠了噪叙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡霉翔,死狀恐怖睁蕾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤子眶,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布瀑凝,位于F島的核電站,受9級特大地震影響臭杰,放射性物質(zhì)發(fā)生泄漏粤咪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一渴杆、第九天 我趴在偏房一處隱蔽的房頂上張望寥枝。 院中可真熱鬧,春花似錦将塑、人聲如沸脉顿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至来吩,卻和暖如春敢辩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弟疆。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工戚长, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怠苔。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓同廉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柑司。 傳聞我的和親對象是個殘疾皇子迫肖,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348