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)

登录权限交互流程:

  • 用户访问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

人群报告权限交互流程:

  • 用户点击"人群报告"链接(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访问目标资源,则返回登录页。

REST API权限集成设计的更多相关文章

  1. 接口加密《二》: API权限设计总结

    来源:http://meiyitianabc.blog.163.com/blog/static/105022127201310562811897/ API权限设计总结: 最近在做API的权限设计这一块 ...

  2. API权限设计总结

    最近在做API的权限设计这一块,做一次权限设计的总结. 1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx& ...

  3. 认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...

  4. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  5. 【转载】API权限设计总结

    本文内容转自:http://blog.csdn.net/initphp/article/details/8636669 API权限设计总结: 最近在做API的权限设计这一块,做一次权限设计的总结. 1 ...

  6. 防盗链&CSRF&API接口幂等性设计

    防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...

  7. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

  8. 基于Spring Security2与 Ext 的权限管理设计与兑现

    基于Spring Security2与 Ext 的权限管理设计与实现 一.Spring Security介绍 Spring Security的前身Acegi,其配置及使用相对来说复杂一些,因为要配置的 ...

  9. Atitit.提升 升级类库框架后的api代码兼容性设计指南

    Atitit.提升 升级类库框架后的api代码兼容性设计指南 1. 增加api直接增加,版本号在注释上面增加1 2. 废弃api,使用主见@dep1 3. 修改api,1 4. 修改依赖import, ...

随机推荐

  1. Highcharts 标示区曲线图;Highcharts 对数图表;Highcharts 时间间隔图表

    Highcharts 标示区曲线图 配置 使用 yAxis.plotBands 属性来配置标示区.区间范围使用 'from' 和 'to' 属性.颜色设置使用 'color' 属性.标签样式使用 'l ...

  2. hdu 3032 Nim or not Nim? sg函数 难度:0

    Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. Hrbust 1535 相爱

    Description 静竹在斐波那契的帮助下,渐渐的和数学相爱了.和数学在一起最有意思的就是它能够出一些特别有意思并且巧妙的题目让静竹来思考.这次也不例外,给静竹两个数a,b,又给出了加,减,乘,除 ...

  4. sql中exists,Intersect ,union 与union All的用法

    熟练使用SQL Server中的各种用法会给查询带来很多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本支持. EXCEPT是指在第一个集合 ...

  5. Appium测试Webview

    通常情况下我们都是通过Android自带的tools下的UI automator viewer来获取控件或元素的xpath.class.id等来直接进行定位 如下面的“用户登录”按钮: 但是有一些并不 ...

  6. Volatility2.4以上版本及fmem使用指南

    因为要做一个取证项目,需要用到volatility这款软件,网上很多教程已经是很多年以前的东西了,导致很多人在制作profile这一步就卡住了,今天解决了这个问题,记录在此,分享给大家共同学习 1.安 ...

  7. Python中的数据结构 --- 集合(set)

    1.集合(set)里面的元素是不可以重复的    s={1,2,3,3,4,3,4}      ## 输出之后,没有重复的 2.定义一个空集合 s = set([]) print s,type(s)3 ...

  8. c# IE 清除缓存

    Response.Buffer = true; Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-); Response.Expir ...

  9. mssqlserver SQL注释快捷键

    注释快捷键 选中语句(快捷键:光标定位到需要注释块的最顶行,按住shift+home选中行,放开再按下shift+向下键,选中块) 按住Ctrl然后依次按K,C取消注释快捷键 选中语句 按住Ctrl然 ...

  10. http和https区别

    超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文, ...