开放平台老吕也做过,简单说下建设步骤吧
1、appkey,appsecret 生成与分配(分测试环境与生产环境)
发展初期,可以人工生成、分配;
后期做个平台,用户注册、购买、自动获取接入密钥信息,还可以自己更新密钥信息。
2、api调用步骤
1)下载官网的SDK也可以使用公布的原始的http协议接口自己造SDK
2)获取accessToken
3)调用接口
3、http协议下要解决的问题
1)获取accessToken过程中 密钥的泄漏
其实无法防御,简单防御下就是 做个md5后再传输
2)传输过程中业务数据被拦截篡改
数据签名(参数排序+时间戳+密钥 ,再MD5获取一个签名值)
3)重放攻击
数据签名过程中加入一个当前时间戳参数,约定好签名信息的有效期,服务端根据时间戳判断签名是否过期
4)业务数据的明文问题
不好解决,除非你和客户端约定好另一套对称加密算法,在签名之前将业务数据先进行加密
4、由于http协议下众多安全问题,所以使用https协议很有必要
由于https使用了全程加密技术(非对称加密,数字证书,临时密钥,防重),所以无需担心数据篡改问题,也无需担心accessToken泄漏问题,更无需担心明文问题(包括url 参数和header和body全是加密的)。也就是说使用了https的情况下客户端只需要先用分配的key和secret获取到accessToken,然后就可以放心的调接口传输任何数据了,没有任何安全问题,我们服务端只要做好accessToken的验证就可以了。
5、api以及调用次数授权问题
不同客户可访问的API根据购买情况授权,包括能访问哪些api以及每个api的限速。
限速、限次 、熔断 可以有效解决平台稳定安全问题
6、黑名单制度
主要用来防止恶意调用,可以是IP、手机号、账号、appkey、accessToken,必要时一封了之。
7、accessToken实时失效问题
accessToken具有一定的有效期,假如在有效期内此accessToken被泄漏或者恶意访问,如何紧急处理让它失效呢?
一种办法是服务端缓存 accessToken,假如accessToken泄漏后,从服务端缓存中移除,相当于失效了,这种方法不好的地方就是 服务端需要维护accessToken,在分布式系统情况下这是需要很大的验证开销,并且可能导致服务端带状态。
另一种办法是accessToken黑名单制度,因为accessToken到了服务端是要被解析的,验证真伪以及有效期,配合步骤6中的各种黑名单机制来限制访问,以达到屏蔽accessToken的目的。
今天就到这里,感谢关注老吕架构!