App 前端 <==> 服務(wù)器后端 API 加密文檔
主要三點約定(三點都需要):
用戶驗證:使用 Auth2.0 或者 Json web token(簡稱 jwt)
接口調(diào)用來源限制:使用 AppSecret 和服務(wù)端進行 Hash 加密約定
網(wǎng)絡(luò)傳輸安全:使用 Https 安全傳輸協(xié)議對傳輸數(shù)據(jù)進行加密
??用戶驗證
說明:就像 web 前端使用 cookie & session 來進行用戶的登陸狀態(tài)保持一樣过蹂,手機端 App 也需要良好的鑒權(quán)方式油航。
目的:防止用戶名密碼等隱私信息泄露
集成方式:使用 Auth2.0
或者 Json web token
,請根據(jù)需求進行選取确买,我們下面討論 jwt恬叹。
解鎖??姿勢
如果只是做用戶登陸狀態(tài)安全持久化的話候生,那服務(wù)器采用 Json web token
就好。jwt
是現(xiàn)在做前后端分離用的比較多的一種驗證模式绽昼,隨著如 vue.js
唯鸭、react.js
等 JS
框架的火爆,web
前端開發(fā)也進入到了單頁應(yīng)用(SPA)的時期硅确,jwt
就是用來做前后端分離鑒權(quán)一種良好的解決方案目溉。
jwt
可以避免基礎(chǔ)的賬號密碼鑒權(quán),不用每次傳輸用戶名和密碼進行用戶驗證菱农,保證了用戶賬號的安全性
手機應(yīng)用是前后端分離很徹底的應(yīng)用缭付,用 jwt
這種登陸換取 token
進行用戶會話保持是現(xiàn)階段比較好的方式。這里不講具體技術(shù)循未,因為 jwt
屬于后端集成陷猫,具體 jwt
方案請參考 jwt 官網(wǎng) 或者各自語言的三方庫網(wǎng)站。
??接口調(diào)用來源 App 限制
說明: 這一步?jīng)]有其他兩步重要的妖,但也是對安全性要求高的應(yīng)用必備的
目的:非官方應(yīng)用無法模擬用戶隱私行為绣檬,防止 Api
被惡意調(diào)用(如:獲取用戶訂單,用戶信息接口)
集成方式:前后端一起約定一個 AppKey
和 AppSecret
嫂粟,進行 Hash
等方式加密
解鎖??姿勢
前后臺約定一個 AppKey
用來做為應(yīng)用的唯一標識符娇未,也可以用來區(qū)分 Android
和 iOS
端。
例(更新用戶信息):
*更新用戶信息*
//約定 key & 秘鑰
AppKey = "fGLQcHZtmFfadfasd3eZ3uQGxcu4YwxeEuBvTC"
// Secret 秘鑰用來進行做前后臺數(shù)據(jù)加密混合赋元,把參數(shù) key 進行生序排列忘蟹,之后拼接飒房,采用秘鑰進行散列加密,也可以加鹽處理媚值,對數(shù)據(jù)安全要求極高的話可以進行時間戳驗證 => 這樣就可以計算出加密的參數(shù) secret:""
AppSecret = "YCsmvfdsfsaGuJCffdasfqzuAceNtF7o3XvnkRAoWCqX"
// 本篇只討論 API 傳輸安全狠毯,不討論 RESTFUL_API
RESTFUL_API_URL: https://netzhiji.com/api/v1/users
// 請求方式
Request_method: 'put',
// 請求頭設(shè)置,針對服務(wù)器做用戶鑒權(quán)驗證
Request_header: {
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ',
}
//參數(shù)
params: {
userID: '12',
name: '劉紫陽',
orderAddress: '城鄉(xiāng)結(jié)合部'... 等參數(shù)
secret:"此處參數(shù)通過 AppSecret秘鑰加密得出"
}
服務(wù)器接收到請求后回先通過相同算法計算出加密字段褥芒,驗證參數(shù)中 scret
是否正確嚼松,如果不正確,則返回調(diào)用接口失敗锰扶。
API 加密方式:
設(shè)計簽名算法(具體 hash 次數(shù)可根據(jù)需求以及實現(xiàn)做出調(diào)節(jié))
md5
( md5
( md5
(按參數(shù) key 降序排列拼接)3次 + md5
(APP_SECRET)3次 )7次 + md5
(鹽:YUKhRjPmsnxho3kEkJszKrBXpsYZTDynwKxRfpG3xfZuq)6次 )3次
??網(wǎng)絡(luò)傳輸安全
說明: :使用 Https
安全傳輸協(xié)議對傳輸數(shù)據(jù)進行加密
目的:防止 Api
被惡意抓认仔铩(如:下訂單,支付接口)
集成方式:主要是后端要去申請 Https
的證書坷牛,有收費也有免費的罕偎,免費的推薦如國內(nèi) 又拍云 SSL
解鎖??姿勢
SSL
引用自維基百科
Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), both frequently referred to as "SSL", are cryptographic protocols that provide communications security over a computer network.[1] Several versions of the protocols find widespread use in applications such as web browsing, email, Internet faxing, instant messaging, and voice-over-IP (VoIP). Websites use TLS to secure all communications between their servers and web browsers.
傳輸層安全協(xié)議(英語:Transport Layer Security
,縮寫:TLS
)京闰,及其前身安全套接層(Secure Sockets Layer
颜及,縮寫:SSL
)是一種安全協(xié)議,目的是為互聯(lián)網(wǎng)通信蹂楣,提供安全及數(shù)據(jù)完整性保障俏站。網(wǎng)景公司(Netscape
)在1994年推出首版網(wǎng)頁瀏覽器,網(wǎng)景導航者時痊土,推出 HTTPS
協(xié)議肄扎,以 SSL
進行加密,這是 SSL
的起源赁酝。IETF將SSL進行標準化犯祠,1999年公布第一版TLS標準文件。隨后又公布RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)酌呆。在瀏覽器雷则、電子郵件、即時通信肪笋、VoIP、網(wǎng)絡(luò)傳真等應(yīng)用程序中度迂,廣泛支持這個協(xié)議藤乙。主要的網(wǎng)站,如 Google惭墓、Facebook
等也以這個協(xié)議來創(chuàng)建安全連接坛梁,發(fā)送數(shù)據(jù)。目前已成為互聯(lián)網(wǎng)上保密通訊的工業(yè)標準腊凶。
簡單來說就是一般接口傳輸如果采用了 TLS/SSL
加密協(xié)議后划咐,別人就難以抓取到有效數(shù)據(jù)了拴念。即使抓包抓到的也是亂碼。
總結(jié)
通過以上三種方式并行褐缠,可以有效的提高我們手機端應(yīng)用的安全性政鼠。以上為拋磚引玉,如果大家有更好的方法也歡迎在評論區(qū)提出互相學習队魏。