App登陸要實(shí)現(xiàn)的功能:
- 密碼不會(huì)明文存儲(chǔ)歇盼,并且不能反編繹解密;
- 在服務(wù)器端可以控制App端的登陸有效性魏滚,防止攻擊者拿到數(shù)據(jù)之后镀首,可以長(zhǎng)久地登陸;
- 用戶如果密碼沒(méi)有泄露鼠次,不用修改密碼就可以保證安全性更哄;
- 可以區(qū)分不同類型的客戶端安全性靖秩;比如Android用戶受到攻擊,只會(huì)讓Android用戶的登陸失效竖瘾,IOS用戶不受影響沟突。
App第一次登陸流程:
用戶輸入密碼,App把這些信息用RSA公鑰加密:(用戶名,密碼,時(shí)間,mac,隨機(jī)數(shù))捕传,并發(fā)送到服務(wù)器惠拭。
服務(wù)器用RSA私鑰解密,判斷時(shí)間(可以動(dòng)態(tài)調(diào)整1天到7天)庸论,如果不在時(shí)間范圍之內(nèi)职辅,則登陸失敗。如果在時(shí)間范圍之內(nèi)聂示,再調(diào)用coreservice判斷用戶名和密碼域携。
這里判斷時(shí)間,主要是防止攻擊者截取到加密串后鱼喉,可以長(zhǎng)久地利用這個(gè)加密串來(lái)登陸秀鞭。
如果服務(wù)器判斷用戶成功登陸,則用AES加密:(隨機(jī)salt,用戶名,客戶端類型,時(shí)間)扛禽,以(用戶名+Android/IOS/WP)為key锋边,存到緩存里。再把加密結(jié)果返回給客戶端编曼。
客戶端保存服務(wù)器返回的加密串
App自動(dòng)登陸的流程:
App發(fā)送保存的加密串到服務(wù)器豆巨,(加密串,用戶名掐场,mac往扔,隨機(jī)數(shù))==>RSA公鑰加密
服務(wù)器用RSA私鑰解密,再用AES解密加密串熊户,判斷用戶名是否一致萍膛。如果一致,再以(用戶名+Android/IOS/WP)為key到緩存里查詢敏弃。如果判斷緩存中的salt值和客戶端發(fā)送過(guò)來(lái)的一致卦羡,則用戶登陸成功噪馏。否則登陸失敗麦到。
不用AES加密,用RSA公鑰加密也是可以的欠肾。AES速度比RSA要快瓶颠,RSA只能存儲(chǔ)有限的數(shù)據(jù)。RSA算法最好選擇2048位的刺桃。搜索" rsa 1024 crack"有很多相關(guān)的結(jié)果粹淋,google已經(jīng)將其SSL用的RSA算法升級(jí)為2048位的。