APP接口安全是APP接口设计中一个很重要的环节,良好的安全机制能够保护后端接口服务不被非法使用,限制和跟踪用户访问状况。下面是笔者从网上查找一些资料并结合公司实际业务设计的一个APP安全调用时序图,欢迎你们拍砖,以改良该设计。 后端
该方案分两部分(公司产品需求):
1.须要认证的接口
2.不须要认证的接口安全
须要认证的接口在用户登陆时,将根据传入的app_key
,生成对应的app_secret
,并返回给客户端,客户端将存储该app_secret
值。后续请求时,将app_key
和由md5(app_key + timestamp + app_secret)
生产的签名写入请求消息头中,传递到服务器端,由服务器端进行校验,因为本案使用Openresty
构建了接口网关,因此签名校验动做将在该网关中完成,若是签名校验成功,则将请求转发到后端服务器,不然将返回签名错误响应。
在调用不须要认证的接口时,因为没法对app_key
进行确认,因此只是简单的根据app_key
生成一个ticket
,返回给客户端,客户端请求时将在请求消息头中携带该ticket
值,服务器端进行简单校验(ticket
是否确实由服务端签发)。该方案固然没法真正作到接口安全,毕竟没有创建信任机制,app_key
彻底能够伪造。但结合公司实际业务,有两个缘由,能够接受这一方案。缘由一,公司产品绝大部分业务场景是要求登陆的,免登请求只限于不多一部分展现类的请求,接口被恶意利用的意义不大。缘由二,因为免登请求有限,因此在服务器端创建白名单机制,白名单上列出全部免登接口URI,限定免登机制的影响范围,防止非法用户恶意修改重要业务数据。
方案二中的ticket
并不设置过时时间,由于能够重复获取ticket
,因此设置过时意义不大,用户在至少一次登陆后,因为服务端有签发密钥,这时 ticket
将被清除,在客户端已获取密钥的状况下,服务端将再也不接收基于ticket
机制的接口请求,所有接口请求将走签名机制。服务器