api接口加密_APP服务端接口的安全机制设计

移动app开发,客户端与服务端的交互,主要是通过http接口。为了保证请求来源的合法性、数据不被篡改,不被重复调用,就需要设计一套安全的机制。简答来说,就是在接口请求参数加上应用号appId、时间戳timestamp、随机字符串nonce、签名sign。

ad6dcc8b3147f4dbd9af571b41d0a256.png

应用号appId:服务端会给每个调用方(客户端)分配一个不同的应用号appId(建议appId随机采用一串字符数字的组合,这样就不容易被猜到)。客户端请求服务端接口参数,都必须带上appId,以此来标识唯一的接入方。一般情况,服务端会再给客户端再分配一个应用密钥appSecret。应用号ID跟应用密钥appSecret一一对应,服务端可以通过appId查到appSecret。如果只有appId,在网络传输过程,就很有可能被劫持从而伪造请求来源。应用密钥appSecret的用法是当作签名的“盐值”,不需要放在接口请求参数,它存在于客户端本地。那么,在网络传输过程,即使请求被劫持了,由于不知道appSercet,也就不能任意伪造请求。所以,使用应用号appId、应用密钥appSecret,就可以保证请求来源的合法性。

时间戳timestamp:客户端请求服务端API接口,都带上当前时间的时间戳,服务端接收到时间戳后,跟服务器当前时间比较,如果时间差超过了设定的阀值,服务端就当做该请求失效。一般情况,客户端时间跟服务器的时间是有差异的。这个就需要服务端单独提供一个获取服务器时间的API接口给到客户端调用。比如请求服务端返回的时间为T1,此时客户端的时间是T2,比较T1、T2得到的差值T12。客户端下一次请求API接口的时候,需要带上这个差值,即客户端当前时间+T12,得到的时间T3才是准确的时间。通过时间戳就可以一定程度解决接口不被重复调用的问题。

为了更好的阻止服务端接口被重复调用,可以在请求参数加上随机字符串nonce,每次请求nonce都不同,服务端缓存随机字符串nonce集合,同时设置缓存的过期时间。服务端接收到请求之后,先判断时间戳,再判断随机串。如果时间戳超出设定的有效时间,则拒绝访问;时间戳有效的话,再判断nonce是否存在,如果nonce存在,则拒绝访问。加上随机字符串nonce的判断,这样就很好的解决了接口被重复调用的问题。

签名sign:通过加密算法对接口请求参数进行加密,得到的一串密文,就是签名sign。简单处理的话加密算法可以选择md5,对安全要求比较高的可以选择RSA。如果在网络上传输的数据被窃取了,然后一些关键业务参数,比如金额被篡改了,再用旧的签名sign传给到服务端。此时服服务端通过加密算法,对请求的业务参数进行加密,得到的签名跟旧的是不同的。如果签名不正确,服务端拒绝访问,不再进行下一步的业务处理。通过签名sign就可以保证数据不被篡改。

补充说明一下,有些服务端接口是需要用户登录才能使用的,可以使用令牌token机制。

令牌token:用户登录app之后,服务端返回一个令牌(token)给到客户端。token必须保证唯一,并且需要设置过期时间,token与用户是一对一的关系,一个token代表一个已经登录的用户。一般为了提高查询效率,都以token-uid的键值的方式,把token存在缓存服务器。通过令牌token就可以判断用户登录状态,可以理解为token就是客户端访问服务端接口的用户凭证。

总结一下,使用应用号appId和应用密钥appSecret,可以保证请求来源的合法性;使用时间戳和随机串防止不被重复调用;使用签名sign保证数据不被篡改;在需要用户登录的接口,使用令牌token机制就可以判断用户登录状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值