摘要:本文信息本文創(chuàng)建于文章更名為一個(gè)簡(jiǎn)單的用戶登錄與訪問(wèn)權(quán)限控制設(shè)計(jì)前述系統(tǒng)用戶分為管理員用戶普通用戶管理員用戶有且唯一系統(tǒng)初始狀態(tài)不存咋任何用戶首次使用需創(chuàng)建用戶前端界面顯示控制用戶管理模塊根據(jù)本地判斷是否為管理員用戶顯示不顯示用戶管理模塊導(dǎo)
本文信息
本文創(chuàng)建于2018/03/22
2018/10/30 文章更名為 一個(gè)簡(jiǎn)單的用戶登錄與訪問(wèn)權(quán)限控制設(shè)計(jì)
前述系統(tǒng)用戶分為管理員用戶、普通用戶
管理員用戶有且唯一
系統(tǒng)初始狀態(tài)不存咋任何用戶,首次使用需創(chuàng)建用戶(admin)
前端界面顯示控制 用戶管理模塊根據(jù)本地credentials判斷是否為管理員用戶 => 顯示/不顯示用戶管理模塊
導(dǎo)航欄模塊功能頁(yè)面顯示導(dǎo)航欄;welcome/login不顯示導(dǎo)航欄
動(dòng)態(tài)控制導(dǎo)航欄的顯示與隱藏
前端本地控制(進(jìn)入頁(yè)面前)-- 路由守衛(wèi) welcome/login頁(yè)面是否本地存在credentials(包含token及用戶信息)(是否屬于已登錄狀態(tài)) => 跳轉(zhuǎn)至首頁(yè)/Next
發(fā)送請(qǐng)求至后端 => 后端確認(rèn)是否首次使用系統(tǒng)(系統(tǒng)有/無(wú)任何用戶)=> welcome/login頁(yè)面
功能頁(yè)面是否本地存在credentials(是否屬于已登錄狀態(tài)) => 進(jìn)入功能頁(yè)面/跳轉(zhuǎn)至login
Admin頁(yè)面是否本地存在credentials(是否屬于已登錄狀態(tài)) => Next/跳轉(zhuǎn)至login
本地credentials是否顯示用戶為管理員類(lèi)型 => 進(jìn)入Admin頁(yè)面/跳轉(zhuǎn)至404頁(yè)面
前端向后端請(qǐng)求驗(yàn)證(進(jìn)入頁(yè)面后)-- http攔截器 請(qǐng)求發(fā)送處理每個(gè)heep請(qǐng)求在請(qǐng)求頭帶上本地credentials中的token
請(qǐng)求響應(yīng)處理返回401狀態(tài)碼 => 刪除本地credentials(如果有),跳轉(zhuǎn)至login
否則,不做特殊處理
后端登錄與鑒權(quán) 登錄邏輯后端接收到前端發(fā)送的用戶信息
將前端發(fā)送的用戶信息(密碼需在后端做hash處理)與數(shù)據(jù)庫(kù)用戶信息比對(duì)
若匹配,Next。若不匹配,返回incorrect/權(quán)限到期
緩存是否存在用戶登錄code(若不存在則生成隨機(jī)code并存入緩存)
簽入token,將用戶信息(id,type等)、code寫(xiě)入token的payload,并設(shè)定token有效期
返回用戶信息及token至前端
用戶身份一般鑒定token解碼失?。喊o(wú)token、token過(guò)期、token的payload不包含需要的信息 => 返回401
token解碼 => 得到用戶信息(包括id、code等) => 對(duì)比code與緩存code是否一致 => Next/返回401
根據(jù)token得到的用戶信息判斷是否為管理員 => 鑒定成功/Next
非管理員檢測(cè)用戶是否已被刪除(用戶刪除只更改數(shù)據(jù)庫(kù)狀態(tài)而非數(shù)據(jù)庫(kù)刪除) => 返回401/鑒定成功
創(chuàng)建用戶鑒權(quán)創(chuàng)建的是系統(tǒng)第一個(gè)用戶
后端接收到前端發(fā)送的創(chuàng)建的用戶信息 => 請(qǐng)求頭是否沒(méi)有攜帶token或是否創(chuàng)建的用戶類(lèi)型為管理員 => Next/返回401
判斷是否為首次使用系統(tǒng) => 創(chuàng)建用戶/返回401
創(chuàng)建的不是系統(tǒng)第一個(gè)用戶
后端接收到前端發(fā)送的創(chuàng)建的用戶信息 => 請(qǐng)求頭攜帶token => 判斷token本身是否過(guò)期 =>返回401/Next
解碼token => 解碼后拿到用戶信息 => 用戶是否為管理員且與緩存token比對(duì) => Next/返回401
創(chuàng)建用戶 => 創(chuàng)建用戶是否成功 => 返回success/Next
是否已存在同名用戶 => 返回已存在同名用戶提示/返回fail
修改用戶信息鑒權(quán)用戶身份一般鑒定
若鑒定用戶為管理員,鑒權(quán)成功;否則,Next
鑒定需要修改的用戶信息是否為用戶自己 => Next/返回401
鑒定舊密碼是否正確 => 鑒權(quán)成功/返回舊密碼incorrect
刪除用戶鑒權(quán)用戶身份一般鑒定
鑒定用戶為管理員 => 鑒權(quán)成功/Next
Tips修改用戶密碼/刪除用戶成功后,刪除對(duì)應(yīng)用戶的緩存里的登錄code
why not cookie => 無(wú)狀態(tài)、防xss攻擊、api多端共用
如何跨域共享用戶登錄狀態(tài)
已經(jīng)使用了jwt,為何還需loggedin-code => tips1即為原因
包含第三方登錄的登錄模塊設(shè)計(jì)(OAuth協(xié)議)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93612.html
摘要:寫(xiě)在前面在一款應(yīng)用的整個(gè)生命周期,我們都會(huì)談及該應(yīng)用的數(shù)據(jù)安全問(wèn)題。用戶的合法性與數(shù)據(jù)的可見(jiàn)性是數(shù)據(jù)安全中非常重要的一部分。 寫(xiě)在前面 在一款應(yīng)用的整個(gè)生命周期,我們都會(huì)談及該應(yīng)用的數(shù)據(jù)安全問(wèn)題。用戶的合法性與數(shù)據(jù)的可見(jiàn)性是數(shù)據(jù)安全中非常重要的一部分。但是,一方面,不同的應(yīng)用對(duì)于數(shù)據(jù)的合法性和可見(jiàn)性要求的維度與粒度都有所區(qū)別;另一方面,以當(dāng)前微服務(wù)、多服務(wù)的架構(gòu)方式,如何共享Sessi...
摘要:原文來(lái)自上一篇文章講了用戶的注冊(cè),驗(yàn)證和登錄,這一篇文章按照約定來(lái)說(shuō)說(shuō)之中的用戶和權(quán)限控制。探尋上面的一些列設(shè)置和代碼更改,已經(jīng)實(shí)現(xiàn)了一小部分的用戶控制登錄的用戶才能發(fā)表。 原文來(lái)自: https://jellybool.com/post/programming-with-yii2-user-access-controls 上一篇文章講了用戶的注冊(cè),驗(yàn)證和登錄,這一篇文章按照...
摘要:框架具有輕便,開(kāi)源的優(yōu)點(diǎn),所以本譯見(jiàn)構(gòu)建用戶管理微服務(wù)五使用令牌和來(lái)實(shí)現(xiàn)身份驗(yàn)證往期譯見(jiàn)系列文章在賬號(hào)分享中持續(xù)連載,敬請(qǐng)查看在往期譯見(jiàn)系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問(wèn)層和前端控制器但是忽略了對(duì)身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:構(gòu)造函數(shù)的第一個(gè)參數(shù)是對(duì)象,所以可以自定義緩存對(duì)象。在微服務(wù)各個(gè)模塊獲取用戶的這些信息的方法如下略權(quán)限控制啟用基于方法的權(quán)限注解簡(jiǎn)單權(quán)限校驗(yàn)例如,刪除角色的接口,僅允許擁有權(quán)限的用戶訪問(wèn)。 showImg(https://segmentfault.com/img/remote/1460000019593311); 微服務(wù)架構(gòu) showImg(https://segmentfault.c...
閱讀 3529·2021-10-08 10:04
閱讀 877·2019-08-30 15:54
閱讀 2191·2019-08-29 16:09
閱讀 1359·2019-08-29 15:41
閱讀 2287·2019-08-29 11:01
閱讀 1747·2019-08-26 13:51
閱讀 1037·2019-08-26 13:25
閱讀 1839·2019-08-26 13:24