系统接口权限设计

摘要:
这里,我们只控制系统是否可以与平台接口。如果您需要逐个分配和控制每个特定接口的权限,可以添加“接口访问表”和“接口访问授权关联表”。通过这种方式,每个访问令牌可以与某些授权的接口资源相关联,以实现详细的接口权限控制。

 

一、     前言

随着时代发展和技术的进步,系统也在不断发展和完善,从原有的单一的企业开发使用,到现在的跨平台、多系统、多用户的集成对接开发模式。系统的发展也是非常迅速的,很多设计和对接模式也需要不断的改仅和升级。现在的一个系统往往不单单是某一个团队开发、使用,而是多个团队同时开发不同的模块,以及现在的系统往往是平台化的,一些第三方在使用对接的时候,就需要考虑到每个对接者是否具有相应的权限。每个对接者可能所具有的的权限都是不同的且权限的有效期也都是不尽相同,这就需要一个接口访问的权限分配和校验模块。

二、     平台设计

1. 数据库设计

第三方应用接入表t_app_regist

字段名

类型

字段长度

字段释义

是否必填

id

int

11

主键

appcode

varchar

32

微应用编号

appname

varchar

32

微应用名称

icon

int

11

微应用图标

appdes

varchar

500

微应用描述

apptype

char

1

应用分类,0:系统应用 1:微应用

appvstype

char

1

应用类型:H为H5;A为安卓;I为IOS

appimgs

varchar

500

应用截图

appkey

varchar

50

给予第三方的应用标识

appsecret

varchar

50

用于鉴权api使用的传输加密秘钥

  • owner

varchar

32

微应用归属单位

apparea

varchar

32

应用所属地域

appind

varchar

32

应用所属行业

auditstatus

char

1

审核状态:W待审核;Y审核通过;N未通过

createtime

datetime

0

创建时间

updatetime

datetime

0

更新时间

creator

varchar

32

创建者

updator

varchar

32

更新着

      第三方对接接入需先在我们的系统中创建一个应用,系统会自动生成应用的授权信息,包括appcode、appkey、appsecret,这是应用授权所必需的信息。

微应用授权表t_app_license

字段名

类型

字段长度

字段释义

是否必填

id

int

11

主键

appkey

varchar

32

应用的唯一标识key

appsecret

varchar

32

应用的密钥

jsapiticket

varchar

32

前端鉴权的jsapiticket

accesstoken

varchar

32

令牌

validperiod

int

11

有效期(单位秒)

createtime

datetime

0

创建时间

updatetime

datetime

0

更新时间

      微应用授权表是给所有的第三方的微应用生成jsapiticket和accesstoken,jsapiticket用于前端的鉴权,accesstoken是第三方在请求系统的接口及相应能力的时候需传递的参数,系统会检验此accesstoken是否存在及有效,若accesstoken检验成功则放行,检验失败则拦截请求。

2. 逻辑设计

     系统接口权限设计第1张

3. 接口访问设计

     系统接口权限设计第2张

三、     平台自身系统对接

由于目前系统都是向前后端分离的大趋势发展,当前后端分离的系统,前端在请求后端服务时,一般有两种权限管控方式。

  1. 直接访问:若前后端系统部署在同一服务器,或者同一个网段(内网),以及可以通过设置IP白名单访形式等的其他软硬件安全管控场景下,请求接口以及平台资源时可以不要求使用accesstoken令牌,可直接访问。
  2. accesstoken授权校验:若前后端系统并非部署在同一服务器,或者不在同一个网段(内网),以及没有设置IP白名单等其他软硬件管控手段,可以理解为和第三方对接无明显差异的情况下,可以考虑通过accesstoken的授权校验来对接前后端系统。

备注:不仅是前后端,平台自身不同的业务系统之间的对接也可参考上述的对接方式进行对接,这样可以保证系统的安全稳定、免受其他未知系统的攻击。

四、     第三方对接

出于安全考虑,第三方对接平台需要验证身份的合法性,现在市面上的开放平台也基本上都是这样的一个流程:先在平台上注册一个应用,拿到appcode、appkey、appsecret等参数,通过这几个参数获取开放平台的accesstoken令牌,用accesstoken令牌来和开放平台进行数据交互,例如:钉钉和微信。当然这里对接模式也是这样的一个流程。

一般情况下获取的accesstoken令牌都是有一个有效期的,这里的有效期是7200秒,所以第三方需要在令牌失效前重新获取新的accesstoken进行保存,在第三方进行接口请求及数据交换时,需要带上这个accesstoken,平台会校验后判断是否放行或者拦截请求。

五、     小结

此系统接口权限管控设计是参考钉钉及微信的开放平台设计的,能够保证很多平台系统在前后端对接、与第三方对接时的安全稳定,免受未知系统的攻击。这里仅对系统是否能够与平台接口对接的管控,如果需要对每一个具体的接口一一进行权限分配和管控的话,可以再新增“接口访问表”、“接口访问-授权关联表”,这样即可实现每个accesstoken关联某些特定授权的接口资源,实现接口细化权限管控。

免责声明:文章转载自《系统接口权限设计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA 传输post传输长字符、数据编码解码 反序列化字符串单一职责原则(SRP)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

面向对象开发方法概述

小结: 1.面向对象的软件开发有什么优点? (1)与人类习惯的思维方法一致 (2)稳定性好. (3)可重用性好 (4)较易开发大型软件 (5)可维护性好 2.在软件系统中,为什么说一个独立的不对外提供任何服务的对象是没有意义的. 建立对象需要开辟空间,并且影响程序运行的速度,所以应该尽可能减少没用对象的创建和开辟,那样既浪费了资源,有影响了程序的执行速...

Web App安全入门

Web App是什么 Web App 是运行与网络和标准浏览器上,基于网页技术开发实现特定功能的应用。 前端:HTML CSS JavaScript 后端:Java Python PHP 数据库:Mysql Oracle 容器:IIS,Apache Nginx 协议:TCP DNS HTTP HTTPS 访问过程如图: 简单的web应用代码 import...

java接口的意义

java当中继承一个接口,要重写他的方法的话,那为什么还要多此一举的去实现一个接口呢? 直接把方法写在类当中不就可以了?就是说去掉类名后面的Implements 接口 ,可以不可以呢? 接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原...

如何使用华为机器学习服务和Kotlin实现语音合成

1. 引言   你曾遇到过这种情况吗?一本小说太长,要花很长时间阅读,但如果有app能自动为你阅读,就会省时很多。因此,将文本转换成语音的工具应运而生。华为机器学习服务(HUAWEI ML Kit)具备语音合成(Text To Speech, TTS)功能,能让app快速实现从文本到语音的转换。TTS可以将文本转换成人声。这也可以通过默认方法实现,但这些方...

MySQL通过自定义函数以及存储过程实现递归查询父级ID

1.存储过程定义  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译 2.为什么用存储过程实现树结构数据查询父级节点  1、能完成较复杂的运算与判断    2、可编程行强,灵活    3、SQL编程的代码可重复使用    4、预编译机制    5、减少...

关于adb安装指定版本

由于airtest测试群控安卓手机发现adb服务端和客户端版本不一致,运行经常报错,服务端是1.0.40 而客户端为1.0.41. (注意:服务端是指手机端,客户端为电脑端,安卓七和六的版本为40.而安卓八以上的为41,所以说做群控的时候最好安装同样传的手机系统) 此时我们需要更改客户端的adb版们,此处以mac为例 经多多方查找在这个人的博客上找到了 h...