應用層安全架構設計-訪問控制

權限控制,或者說訪問控制,普遍應用於各個系統中。抽象地說,是某個主體(subject)對某個客體(object)須要實施某種操做(operation),而系統對這種操做的限制就是權限控制。前端

在網絡中,爲了保護網絡資源的安全,通常是經過路由設備或者防火牆創建基於IP和端口的訪問控制。java

在操做系統中,對文件的訪問也要訪問控制。好比在Linux系統中,一個文件能夠執行的操做分爲「讀」、「寫」、「執行」三種,這三種操做同時對應着三種主體:文件擁有者、文件擁有者所在的用戶組、其餘用戶,主體、客體、操做這個三者之間的對應關係,構成了訪問控制列表。程序員

在Web應用中,根據訪問客體的不一樣,常見的訪問控制能夠經過解決如下幾個目標問題來實現:web

  • 他是誰?
  • 他只能訪問給他授予了權限的接口!
  • 他不能查看別人的數據!

下面咱們之前後端分離的項目爲例,解釋如何解決這幾個目標問題:後端

他是誰?

在先後端分離項目中,前端用戶登陸後後端服務會給其頒發一個token,好比咱們所熟知的JWT(JSON Web Token),然後每次前端請求後端接口都會帶上這個token。因爲JWT上會帶有用戶信息,此時咱們要作的就是校驗這個token對應的用戶是否爲系統合法用戶。安全

他只能訪問給他授予了權限的接口!

光知道他是系統的合法用戶仍是不夠,web應用還得保證當前用戶只能訪問他擁有權限的接口。服務器

好比有個薪資查詢的接口,業務上只容許部門領導角色訪問。若是系統不作控制,張三知道了薪資查詢接口,就拿着本身的token去調用此接口而後就能知道全部員工的薪資了,這種問題咱們稱之爲"越權訪問"。微信

處理這個問題如今應用普遍的一種方法就是「基於角色的訪問控制(RBAC:Role-Based Access Control)」,也稱「垂直權限管理」。網絡

RBAC事先會在系統中定義出不一樣的角色,不一樣的角色擁有不一樣的權限,一個角色實際上就是一個權限的集合。而系統的全部用戶都會被分配到不一樣的角色中,一個用戶可能擁有多個角色。架構

當用戶帶着token請求後端服務時,咱們還得經過token查詢出當前用戶所屬的角色,而後根據角色查詢出用戶擁有的全部權限。權限框架 Spring Security 和  Shiro都很好的支持RBAC控制。

他不能查看別人的數據!

張三和李四都是部門領導,他們均可以查詢員工薪資的權限。可是他們都只被容許查看本身部門員工的薪資。張三知道了接口調用規則,就能夠經過修改調用參數獲取李四部門員工的薪資了,這種狀況固然也是不被容許的。

在RBAC模型下,系統只會驗證用戶A是否屬於角色RoleX,而不會判斷用戶A是否能訪問只屬於用戶B的數據DataB,所以發生了越權訪問。這種問題咱們稱之爲「水平權限管理問題」。

如今數據級權限管理並無很通用的解決方案,通常是具體問題具體解決。

簡單的作法是給接口請求加上祕鑰,經過接口參數+當前系統登陸人一塊兒進行加密發送給後端服務,後端接受到請求後對加密內容進行解密,根據約定的規則解析出用戶信息並與登陸用戶進行匹配,匹配上正常訪問,匹配不上則拒絕訪問。




以上,但願對你有所幫助!



End




乾貨分享



這裏爲你們準備了一份小小的禮物,關注公衆號,輸入以下代碼,便可得到百度網盤地址,無套路領取!

001:《程序員必讀書籍》
002:《從無到有搭建中小型互聯網公司後臺服務架構與運維架構》
003:《互聯網企業高併發解決方案》
004:《互聯網架構教學視頻》
006:《SpringBoot實現點餐系統》
007:《SpringSecurity實戰視頻》
008:《Hadoop實戰教學視頻》
009:《騰訊2019Techo開發者大會PPT》

010: 微信交流羣






近期熱文top



一、關於JWT Token 自動續期的解決方案

二、SpringBoot開發祕籍-事件異步處理

三、架構師之路-服務器硬件掃盲

四、基於Prometheus和Grafana的監控平臺 - 環境搭建

五、RocketMQ進階 - 事務消息



我就知道你「在看」





本文分享自微信公衆號 - JAVA日知錄(javadaily)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索