java - 在前后端分離的項(xiàng)目中,如何驗(yàn)證前端請(qǐng)求數(shù)據(jù)是否合法
問(wèn)題描述
問(wèn)題解答
回答1:如果后端是分布式的話(比如云服務(wù)器),建議使用 oauth2.0中的token驗(yàn)證方式,如果只是開(kāi)發(fā)的話,可以用cookie。oauth登錄流程如下:
新建token表,字段 token,user_id,login_at,expire_at
用戶使用賬號(hào)密碼登錄
登錄成功則在數(shù)據(jù)表token插入一條記錄,并把該用戶之前所有token刪除或者設(shè)置為過(guò)期,并把token返回給前端
前端使用ajax的時(shí)候添加headerAuthorization=token
后端讀取請(qǐng)求頭中的Authorization,并與數(shù)據(jù)庫(kù)比對(duì),如果存在且未過(guò)期,則視為合法用戶,否則返回錯(cuò)誤
回答2:1 用戶登錄一般就是cookie + session,服務(wù)器不是同一臺(tái)也一樣呀,其中一臺(tái)多一個(gè)請(qǐng)求轉(zhuǎn)發(fā)功能就好了,因?yàn)橥床呗缘南拗疲L問(wèn)另一個(gè)域名是不能帶上cookie的。
2 一般會(huì)在前端會(huì)有個(gè)摘要函數(shù)來(lái)生成數(shù)據(jù)的摘要,雖然隨數(shù)據(jù)post上去,然后后端用同樣的摘要函數(shù)生成post上來(lái)的數(shù)據(jù)的摘要,與post上來(lái)的摘要進(jìn)行比對(duì),如果一致就證明數(shù)據(jù)沒(méi)被修改過(guò)。但是用戶如果知道你用的摘要函數(shù)是什么它也可以自己生成數(shù)據(jù)的摘要post上去,所以其實(shí)理論上是沒(méi)法判斷的,但實(shí)際中普通用戶并不知道這些。
回答3:JWT, json web token.
后端怎么判斷這個(gè)數(shù)據(jù)是否被更改? 什么意思? 后端db不是存了數(shù)據(jù)嗎?
回答4:后端數(shù)據(jù)驗(yàn)證,這個(gè)是前后端分離數(shù)據(jù)安全必須要做的。通常的做法就是做sign加密需要用到的是key和secret比如淘寶api的加密方式 淘寶sign
key為用戶標(biāo)識(shí),表名你是誰(shuí),secret代表你的鑰匙。鑰匙為服務(wù)端生成,只能在客戶端加密時(shí)使用,在數(shù)據(jù)傳輸過(guò)程中不能包含sercet信息??蛻舳烁鶕?jù)特定規(guī)則對(duì)所有請(qǐng)求數(shù)據(jù)進(jìn)行加密后,后端獲取到所提交的數(shù)據(jù)在用同樣方式加密,然后對(duì)比sign參數(shù)是否一致,一致則說(shuō)明數(shù)據(jù)在傳輸過(guò)程中未遭到篡改。另外還需要時(shí)間的時(shí)效性檢測(cè)比如timestamp參數(shù),要求時(shí)間誤差不得超過(guò)前后5分鐘還有一點(diǎn),數(shù)據(jù)重復(fù)請(qǐng)求,后端接收到sign后做個(gè)cache把sign存起來(lái),失效時(shí)間5分鐘(和上面時(shí)間對(duì)應(yīng)),同一個(gè)sign表示本次請(qǐng)求已經(jīng)重復(fù)請(qǐng)求過(guò),然后拒絕
基本上都是這個(gè)流程,保證數(shù)據(jù)安全,時(shí)效性,防重復(fù)等。
回答5:sessionStorage或localStorage 保存后臺(tái)自己生成的特殊密碼。每次請(qǐng)求通過(guò)head帶上,通過(guò)后臺(tái)驗(yàn)證數(shù)據(jù)合法
