Open API 安全设计
如何保证外网开放接口的安全性。
1.使用加签名方式,防止数据篡改。
2.信息加密与密钥管理,AES加密。
3.搭建OAuth2.0认证授权,授权之后获取accessToken。
4.使用令牌方式,先获取token,带着token发送请求。
5.搭建网关实现黑名单和白名单。
一、令牌方式搭建搭建API开放平台
方案设计:
1.第三方机构申请一个appId,通过appId去获取accessToken,每次请求获取accessToken都要把老的accessToken删掉
2.第三方机构请求数据需要加上accessToken参数,每次业务处理中心执行业务前,先去dba持久层查看accessToken是否存在(可以把accessToken放到redis中,这样有个过期时间的效果),存在就说明这个机构是合法,无需要登录就可以请求业务数据。不存在说明这个机构是非法的,不返回业务数据。
3.好处:无状态设计,每次请求保证都是在我们持久层保存的机构的请求,如果有人盗用我们accessToken,可以重新申请一个新的taken.
二、基于OAuth2.0协议方式
原理:
主流分为商家自研和ISV(独立软件开发商,应用服务商)模式
商家自研,基本是自己的店铺商户,子公司等。平台提供应用挂店铺的形式。一个应用可以挂多个店铺
ISV模式,同样一个应用挂多个店铺,是独立软件供应商,提供应用服务。平台在应用服务市场提供购买服务产品,商家购买服务后方可使用。
流程:
1、应用服务商(商家自研)提供授权连接(参数appId:应用服务商应用ID,appSecret:秘钥,自带参数state,回调时带回,回调地址),访问到平台进入平台授权登录。
2、登录成功,回调应用服务商,此时应用服务商回调地址为应用配置的回调地址或者授权时连接中配置回调(return_url=http//)地址。
3、回调时,返回自带参数和code,code2分钟有效。
4、通过appId,code来获取,openid(client_id店铺id),店铺信息,accessToken,refreshToken,accessTokenExpireTime过期时间。
accessToken一天或者一周有效,refreshToken一周+1天有效或者一个月有效。
5、如果没有店铺信息,则通过获取店铺信息结果获取,通过openid(client_id)获取店铺信息。
三、信息加密与密钥管理
- 单向散列加密
- 对称加密
- 非对称加密
- 安全密钥管理
1、发放加密key,按照规则加密参数,参数暴露,加密sign验证来源。
2、RSA加密是一种非对称加密,发放公钥私钥。
3、AES加密,发放加密key,参数非暴露,通过传入的client_id进行参数解密。
四、白名单验证
1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求。
2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单。
3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单(服务网关)。