REST API權限集成設計


REST API權限集成設計#

應用分為兩大部分,前端html+后端Rest服務,前端html和后端Rest服務部署完全分離。
目標:可訪問資源都處於權限控制之下(意味着通過瀏覽器地址欄的任意url都會被攔截),並提供跨域訪問支持。


項目模塊#

前端模塊:應用界面,通過rest接口與后台交互。
后端模塊:UPM(用戶權限管理)模塊+數據服務(包含多種數據來源,比如本地DB、第三方服務等)統一作為Rest封裝層。

應用模塊權限訪問交互流程#

Token##

  • Client和Server交互的令牌,相當於客戶端和Server交互的唯一id,絕大部分(登錄時不需要)Client請求都會帶上此id,和SessionId類似,只是它不必受限於單個Web容器並能夠自定義Token的過期時間、生成策略。
  • 對於一個獨立用戶,Server和UPM共用相同的Token
  • Token包含tokenid+userid+其它輔助信息.

UPM##

UPM提供對整個應用系統中關於資源和用戶角色關系的權限配置,並且對外提供認證和授權的接口。

Token Manager##

維護Token生命周期,可配置Token的過期時間,Token Mananger維護一張hash表,k為用戶id,v為Token,每次用戶請求匹配token時自動檢查Token是否過期,如果過期,則返回過期的狀態碼。
Token指標:Token使用次數、Token過期時間
Token使用次數:如果客戶端請求次數大於了Token默認設定請求次數,則需要重新生成Token,但無需重新登錄。
Token過期時間:超過Token過期時間的請求將會觸發重新登錄。

登錄權限交互流程##

業務流:用戶登錄(login.html)訪問,輸入用戶名和密碼后訪問主頁(index.html)

登錄權限交互流程:
login

  • 用戶訪問Client靜態資源login.html,填寫用戶名和密碼並執行登錄
  • 用戶名和密碼被傳遞到UPM
  • UPM執行認證(authentication),校驗用戶名和密碼
  • 認證通過后執行授權(authorization),獲取和當前用戶關聯的所有可訪問的資源
  • 如果上一步執行成功,UPM將請求TokenManager創建Token,若不通過則返回錯誤碼(授權、認證錯誤碼不同)
  • UPM將token+授權數據返回給客戶端
  • 客戶端收到token+授權數據展現index.html給用戶(index.html可能存在多個模塊,需要控制頁面展示)

備注:Client端需要處理從UPM端返回的數據,包含Token和狀態碼,如果狀態碼不是成功標識,依據具體的狀態碼轉向特定頁面,否則登錄成功,存儲Token(比如存儲到Cookie),並跳轉到首頁。

登錄后資源訪問##

業務流:假定用戶進入index.html存在一個rest資源鏈接,對應rest服務"/audience/report",用於請求最新的人群報告,人群報告展示頁面為audience.html

備注:此時用戶已登錄,Client的Cookie中已存在Token

人群報告權限交互流程:
business

  • 用戶點擊"人群報告"鏈接(rest url=/audience/report)
  • 客戶端發送請求(包含user+rest url+ token)給UPM
  • 客戶端發送請求(rest url=/audience/report + token)發給Server
  • Server匹配token,UPM授權rest url,如果token未過期並且匹配成功並且upm授權成功將調用實際業務處理流獲取數據,否則返回錯誤碼
  • 將數據和Token信息返回給客戶端
  • Client依據Server的數據渲染人群報告頁面展現給用戶

前后端交互備注#

  • 前端的所有請求,除登入請求之外,其它所有請求都在header中附帶用戶id(userId)和令牌(tokenId)傳遞給服務端。
  • 任何請求都必須帶令牌,若無令牌,直接rest url訪問目標資源,則返回登錄頁。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM