API权限控制与安全管理
摘自网上
一、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)
API权限控制与安全管理的更多相关文章
- 认证鉴权与API权限控制在微服务架构中的设计与实现(四)
引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...
- Spring Boot 之 RESRful API 权限控制
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “简单,踏实~ 读书写字放屁” 一.为何用RESTful API 1.1 RESTful是什么? ...
- 【微服务】之七:轻松搞定SpringCloud微服务-API权限控制
权限控制,是一个系统当中必须的重要功能.张三只能访问输入张三的特定功能,李四不能访问属于赵六的特定菜单.这就要求对整个体系做一个完善的权限控制体系.该体系应该具备针区分用户.权限.角色等各种必须的功能 ...
- MVC API 权限控制
定义一个类:TestAuthorizeAttribute public class TestAuthorizeAttribute : AuthorizeAttribute { public strin ...
- Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制
摘要:用spring-boot开发RESTful API非常的方便,在生产环境中,对发布的API增加授权保护是非常必要的.现在我们来看如何利用JWT技术为API增加授权保护,保证只有获得授权的用户才能 ...
- web api 权限控制
https://www.cnblogs.com/landeanfen/p/5287064.html 我只是个搬运工, 我只想存个档
- gin-jwt对API进行权限控制
前言 之前文章简单介绍了如何运行gin+vue的前后端分离开源项目,该项目是学习了Gin实践教程后结合vue-element-admin写的,该教程讲得很详细,适合入门Gin.本篇文章将介绍gin+v ...
- 【SpringSecurity系列3】基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/02-springsecurity-state ...
- 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
随机推荐
- Apple iOS MDM service 简介
Apple iOS MDM service 簡介 藉由MDM服務,企業可以用來控管配發給員工的iOS Device.可以採用Apple官方推出的工具,也可以採用第三方開發的服務. MDM server ...
- SQLSERVER中统计所有表的记录数
SQLSERVER中统计所有表的记录数 利用系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点. 方法是利用隐藏未公开的系统存储过程sp_MS ...
- 转载:推荐给每个“数据分析师”看的PPT——关于开会的那点事
推荐给每个“数据分析师”看的PPT——关于开会的那点事 经常对开会“深恶痛绝”,大概的原因有两个,其一,开会之前的准备,各种指标.各种分析.各种PPT,其二,开会中的板凳.废话,尤其是走形式的会议,战 ...
- JDBC插入数据实例
在本教程将演示如何在JDBC应用程序中向数据库的一个表中插入数据记录. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中插入数据记录. 要执行以下示例, ...
- JDBC删除数据库实例
在本教程将演示如何在JDBC应用程序中删除一个指定的数据库. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中创建数据库. 要执行以下示例,需要用实际用户名和密码 ...
- Spring JDBC SimpleJdbcInsert类示例
org.springframework.jdbc.core.SimpleJdbcInsert类是一个多线程,可重用的对象,为将数据插入表提供了易用的功能.它提供元数据处理以简化构建基本insert语句 ...
- LintCode #2 尾部的零
计算阶乘尾部的0的个数,初一看很简单. 先上代码 public static long GetFactorial(long n) { || n == ) ; ); } //Main方法中调用 ); ; ...
- 嵌入式开发值zynq驱动—— zynq SPI Flash 驱动过程
http://blog.csdn.net/pengwangguo/article/details/52292664 http://blog.csdn.net/pengwangguo/article/d ...
- 浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时
今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许 ...
- C# HttpClient请求
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...