博納網(wǎng)絡(luò)在前面關(guān)于APP開(kāi)發(fā)后臺(tái)搜索軟件、定時(shí)處理隊(duì)列等方面進(jìn)行了經(jīng)驗(yàn)分享,幾天我們聊聊一個(gè)APP項(xiàng)目開(kāi)發(fā)后臺(tái)制作的核心技術(shù)。作為深圳APP開(kāi)發(fā)公司,我們真誠(chéng)希望這類(lèi)型的文章對(duì)您的APP平臺(tái)運(yùn)作帶來(lái)幫助。
APP開(kāi)發(fā)之App后臺(tái)制作核心技術(shù)
App是近幾年才發(fā)展起來(lái)的,由于App客戶(hù)端的特性,因此App后臺(tái)的技術(shù)實(shí)現(xiàn)和般的Web后臺(tái)是有區(qū)別的。
(1)APP開(kāi)發(fā)后臺(tái)制作經(jīng)驗(yàn)之:用戶(hù)驗(yàn)證方案
App操作中經(jīng)常涉及用戶(hù)登錄操作,用戶(hù)登錄就需要使用用戶(hù)名和密碼。為了置全起見(jiàn),在登錄的過(guò)程中暴露密碼的機(jī)會(huì)越少越好登錄過(guò)程中怎樣才能最大程度地避免泄露用戶(hù)的密碼的可能性呢?
1.使用HTTPS協(xié)議
避免信息的泄露,最基本的方案是所有涉及安全性的API請(qǐng)求都必須使用HTTPS協(xié)議,HTTPS協(xié)議是“HTTP協(xié)議”和“SSL/TLS協(xié)議’的組合。SSL是“Secure Sockets Laver”的縮寫(xiě),中文稱(chēng)為“安全套接層”其是20世紀(jì)90年代中期由網(wǎng)景公司沒(méi)計(jì)的。原來(lái)在互聯(lián)網(wǎng)上使用的HTTP協(xié)議是明文,存在很多缺點(diǎn)(比如傳輸內(nèi)容會(huì)被偷窺和篡改),發(fā)明SSL協(xié)議是為了解決這些問(wèn)題。到了1999年,SSL協(xié)議因?yàn)槠鋺?yīng)用廣泛已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn),IETF就在1999年把SSL協(xié)議標(biāo)準(zhǔn)化。SSL協(xié)議標(biāo)準(zhǔn)化之后的名稱(chēng)改為T(mén)LS (Transport Laver Securitv)協(xié)議,中文稱(chēng)為“傳輸層安全協(xié)議”。習(xí)慣上把這兩者并列稱(chēng)呼(SSL/TLS),因?yàn)檫@兩者可以視作同一個(gè)東西的不同階段。
可以把HTTPS大致理解為“HTTP over SSL”或“HTTP over TLS”。其是一個(gè)安全通信通道,基于HTTP開(kāi)發(fā),用于在客戶(hù)計(jì)算機(jī)和App后臺(tái)之間交換信息。其使用安全套接字層(SSL)進(jìn)行信息交換,簡(jiǎn)單來(lái)說(shuō)其是HTTP的置全版。HTTPS實(shí)際上應(yīng)用了安全套接字層(SSL)作為HTTP應(yīng)用層的子層。
HTTPS的模型如圖所示
HTTPS的模型
APP開(kāi)發(fā)程序員與客戶(hù)看看支付寶涉及登錄和支付的頁(yè)面,URL都是UHTTPS開(kāi)頭,這就意味通信是使用HTTPS。國(guó)內(nèi)主流開(kāi)放平臺(tái)的API,例如新浪微博、騰訊等,API請(qǐng)求都是以HTTPS開(kāi)頭。
HTTPS是業(yè)界常用的安全協(xié)議,支付寶登錄的頁(yè)面就是使用了HTTPS協(xié)議,如圖所示
。
(2)APP開(kāi)發(fā)后臺(tái)制作經(jīng)驗(yàn)之:基本的用戶(hù)登錄方案
圖3-2所示 支付寶使用HTTPS的登錄界面
傳統(tǒng)Web網(wǎng)站使用Cookie+Session保持用戶(hù)的登錄狀態(tài),那么在App后臺(tái)怎么實(shí)現(xiàn)類(lèi)似的功能呢?在App后臺(tái)怎么避免每次驗(yàn)證用戶(hù)身份都需要傳輸用戶(hù)名和密碼呢?
解決上面的問(wèn)題,可以參考下面例子
把App后臺(tái)想象為一個(gè)房間,里面有個(gè)房間管理員。同時(shí)房間門(mén)有把鎖,這把鎖有兩種打開(kāi)方式
·輸入了這把鎖上注冊(cè)的用戶(hù)名和密碼。
·用房間管理員提供的鑰匙。
用戶(hù)進(jìn)入這個(gè)房間的流程如下。
(1)用戶(hù)第次輸入鎖上注冊(cè)的用戶(hù)名和密碼打開(kāi)這把鎖后進(jìn)入房間.找到房間管理員,讓其提供把鑰匙
(2)以后用戶(hù)每次需要進(jìn)入這個(gè)房間用這把鑰匙就行,不用擔(dān)心旁邊有人偷看到自己的用戶(hù)名和密碼,從而導(dǎo)致用戶(hù)名和密碼的泄露
(3)用戶(hù)決定一段時(shí)間內(nèi)不再進(jìn)入這個(gè)房司,又怕鑰匙被偷,進(jìn)入房司后把鑰匙還給管理員,讓管理員把鑰匙銷(xiāo)毀其中
(1)就是用戶(hù)的登錄操作;(2)就是用戶(hù)登錄后驗(yàn)證身份的操作;(3)就是用戶(hù)退出登錄的操作
把上面的例子轉(zhuǎn)換為計(jì)算機(jī)的操作,描述如下
1. App后臺(tái)接收到App發(fā)送的用戶(hù)名和密碼后.驗(yàn)證用戶(hù)名和密碼是否正確。如果錯(cuò)誤剛返回錯(cuò)誤信息。如果App后臺(tái)驗(yàn)證正確,生成一個(gè)隨機(jī)的不重復(fù)的tokeu字符串(例如“daf32da456hfdh”),tokeu字符串作為用戶(hù)的唯標(biāo)識(shí)(token就是上面例子中提到的鑰匙)。在Redis中建立token字符串和用戶(hù)信息的對(duì)應(yīng)關(guān)系,例如,把token字符串“daf32da456hfdh”和id為“5”的用戶(hù)對(duì)應(yīng)。注意:Redis的hash數(shù)據(jù)結(jié)構(gòu)將會(huì)在后面 hash存儲(chǔ)對(duì)像的數(shù)據(jù)”這節(jié)中詳細(xì)講解。
2.App后臺(tái)把token字符串和用戶(hù)信息返回給App,App保存這些數(shù)據(jù)作為以后身份驗(yàn)證的必備數(shù)據(jù)。生成token的流程如圖所示
圖生成token的流程
3.需要驗(yàn)證用戶(hù)身份的操作必須要把token字符串傳給App后臺(tái)驗(yàn)證身份。
例如,“test.com/user/update”是更新用戶(hù)的信息的API,這個(gè)API必須驗(yàn)證用戶(hù)身份,當(dāng)調(diào)用API“test. coln/user/update”時(shí),把token字符串“daf32da456hfdh”附在URL上,變成“test.com/user/update?token:daf32da456hfdh”。
當(dāng)App后臺(tái)接收到這個(gè)API請(qǐng)求時(shí),權(quán)限設(shè)置中要求驗(yàn)證用戶(hù)身份,于是取出參數(shù)中token的值“daf32da456hfdh”,在
(1)中建立的token字符串和用戶(hù)信息的對(duì)應(yīng)關(guān)系中查找,如果沒(méi)發(fā)現(xiàn)這個(gè)token值,則返回驗(yàn)證失敗的信息,如果發(fā)現(xiàn)這個(gè)token值,則獲取這個(gè)用戶(hù)的信息。行相關(guān)的更新操作。
4.當(dāng)用戶(hù)退出登錄時(shí),通過(guò)調(diào)用退出登錄的API,讓App后臺(tái)把這個(gè)用戶(hù)對(duì)應(yīng)的token字符串刪除退出登錄的API“test. com/user/logout”也要驗(yàn)證用戶(hù)
token:daf32da456hfdh”。當(dāng)App后臺(tái)接收到退出登錄的API請(qǐng)求時(shí),在
否存在,token字符串存在就把token和用戶(hù)信息刪除。
身份,調(diào)用時(shí)需要加上token變?yōu)椤皌est.com/user/logout?
(1)中建立的tokeu字符串和用戶(hù)信息的對(duì)應(yīng)關(guān)系中查找token字符串是
關(guān)于HTTPS安全協(xié)議方面的本文就分享到這里, 注意:這個(gè)方案并不是十分安全,身份驗(yàn)證依賴(lài)token字符串。如果用尸泄露了URL,那token也泄露了,這相當(dāng)于鑰匙被黑客復(fù)制了一份,深圳APP開(kāi)發(fā)將在“ App通信安全”中將描述一個(gè)防止token在通信中泄露的方案。博納網(wǎng)絡(luò)編輯整理。