摘自网上

一、API权限控制范围

1、首先验证web端请求参数:

(1)web请求参数:渠道、ServiceName、版本、Airline、时间戳(yyyyMMddhhmmssSSS)、reqXML、Language、签名

(2)请求不能为空,并且格式是否符合要求

2、验证渠道+IP是否在白名单中:

(1)API项目启动时,将API_CHANNEL_INFO表数据,缓存到内存中

(2)根据Airline+渠道,去内存中取出授权服务器IP列表,并验证请求IP是否在列表中

3、验证签名:

(1)Web请求签名规则:Airline+”|”+渠道+”|”+版本+”|”+ServiceName+”|”+Language+”|”+Token+”|”+时间戳+”|”+reqXML

(2)根据Airline+渠道,去缓存中取出Token,再将Token解密取出来的Token是加密的,需要解密)

(3)API根据签名规则拼字符串,并用SHA256算法加密,然后验证web传过来的签名和API生成的签名是否一致

4、验证并发:

(1)先验证单机总并发量(service级+version的并发)

(2)再验证(渠道+service+version)的并发

(3)只做单机并发限制,默认认为每个服务器分的总并发数都是相同的

5、验证service授权:

(1)API项目启动时,将service授权表数据,缓存到内存中

(3)根据Airline+渠道+ServiceName+版本,去内存里数据中取值,如果取到值,并且值中的STATUS状态是可用,才说明该ServiceName有访问权限

6、登录接口调整:

(1)判断用户名密码是否正确:密码在数据库里是加盐(盐:账号创建时间),再用sha256算法加密)

(2)验证成功后,redis里需要存数据(KEY是渠道+userid,对应的值有logintime+lasttime),并设置超时时间(不同的渠道有自己的redis超时时间,超时时间值在API_CHANNEL_INFO表里存放)

(3)[1]

7、其它接口调整:

(1)API入口需要校验请求的接口是否需要校验登录(在Service授权表中存放了每个接口是否需要校验的标识)

(2)如果接口需要校验登录:要判断userid在redis里是否存在。若不存在,要返回需要登录的提示;若存在,需要更新redis里的lasttime,并且重置超时时间

(3)如果接口不需要验证登录,但是是已经登录的情况下,也要去重置redis超时时间

8、备注:

(1)API需要一个刷缓存接口(刷新所有服务器上的缓存)

(2)需要RES底层提供API_CHANNEL_INFO、API_SERVICE_AUTH、API_SERVICE_INFO这3个表数据的接口

二、数据库

1、渠道信息表(API_CHANNEL_INFO)

AIRLINE

字符串

航空公司二字码,如:CA

CHANNEL

字符串

渠道

CHANNEL_TYPE

字符串

渠道类型

TOKEN

字符串

TOKEN

LOGIN_TIME_OUT

字符串

登录超时时间

REQUEST_SERVER_IP

字符串

授权服务器IP列表,多个以;分隔

注:联合主键是:AIRLINE+CHANNEL

2、Service授权表(API_SERVICE_AUTH)

AIRLINE

字符串

航空公司二字码,如:CA

CHANNEL

字符串

渠道

SERVICE_NAME

字符串

请求操作类型

MAX_ASSIGN_NUM

字符串

最大并发数

IS_NEED_LOGIN

字符串

请求操作是否需要登录:0或null需要,1不需要

VERSION

字符串

授权版本

STATUS

字符串

状态(0 可用;1 不可用)

注:联合主键是:AIRLINE+CHANNEL+SERVICE_NAME+VERSION

3、Service信息表(API_SERVICE_INFO)

AIRLINE

字符串

航空公司二字码,如:CA

SERVICE_NAME

字符串

请求操作类型

MAX_ASSIGN_NUM

字符串

单机最大总并发数

VERSION

字符串

授权版本

注:联合主键是:AIRLINE+SERVICE_NAME+VERSION


[1] 删除此条变更。因为:假设两个用户ua(用户名:user、密码:pwd)、ub(用户名:userb、密码:pwdb)。a正常登录系统。但b使用用户名user登录系统,则会登录失败。如果此时删除对应的redis缓存的话,将会把a从系统中删除,而不是b)

最新文章

  1. Android开发学习之路-机器学习库(图像识别)、百度翻译
  2. sql字符串分组
  3. postgres配置主从流复制
  4. 关于在windows上的wamp集成环境和xampp上安装mongo扩展
  5. ios awakeFromNib 和 initWithCoder:
  6. 实现QQ在线咨询(需先添加好友)
  7. document对象操作:浏览器页面文件
  8. Django 源码小剖: 应用程序入口 WSGIHandler
  9. 转载---QRcodeJS生成二维码
  10. 在后台直接调用sql
  11. 《火球——UML大战需求分析》(第1章 大话UML)——1.2 结构型的UML(Structure Diagram)
  12. JS中的replace方法
  13. Python 城市菜单详解(超详解)
  14. HDU 5778 abs
  15. (一)Python之猜数游戏
  16. jumpserver v0.4.0 基于 CenOS7 的安装详解
  17. Leetcode中值得一做的题
  18. 虚拟机VMware显示“内部错误”的解决方法
  19. Grafan+Prometheus 监控 MySQL
  20. lavarel 中间件

热门文章

  1. 【转】JS对Cookie的读写删除
  2. Unity GUI(uGUI)使用心得与性能总结
  3. ym——Android开发MVP模式(攻克了View和Model的耦合)
  4. C# HttpClient请求
  5. 分享10款效果惊艳的HTML5图片特效
  6. 《C程序猿从校园到职场》带领大家从校园走向职场
  7. 【WP8】扩展CM的INavigationService方法
  8. asp.net mvc maproute定义可变数量的自定义片断变量
  9. rlwrap安装报错You need the GNU readline 解决方法
  10. windows server 2003R2\2008R2\2012\2016 安装【故障转移群集】cluster