APP开放接口API安全性——Token令牌Sign签名的设计与实现

  在APP开放接口API的设计中,避免不了的就是安全性问题。算法

  1、https协议

  对于一些敏感的API接口,须要使用https协议。https是在http超文本传输协议加入SSL层,它在网络间通讯是加密的,因此须要加密证书。缓存

  2、设计签名

  原理:用户登陆时向服务器提供用户认证信息(如帐号和密码),服务器认证完后给客户端返回一个Token令牌,用户再次获取信息时,需带上此令牌。若是令牌正确,则返回数据。安全

  对于得到Token令牌信息后,访问用户相关接口,客户端请求的url须要带上以下参数:服务器

  时间戳:timestamp网络

  Token令牌:token加密

  Sign签名:signurl

  Sign生成规则能够是:将全部用户请求的参数按照字母排序(包括timestamp、token),而后根据MD5(能够加点salt),所有大写,生成sign签名,这就是所说的url签名算法。spa

  而后登录后每次调用用户信息时,带上sign、timestamp、token参数。设计

  3、具体实现

  一、客户端向服务器端发送用户认证信息(如用户名和密码),服务器端接收到请求后,验证用户信息是否正确。排序

  若是正确:则返回一个惟一不重复的字符串(通常为UUID),而后在Redis中维护Token——Uid的用户信息关系,以便其余API对token验证。

  若是错误:则返回错误代码。

  二、服务器设计一个url请求拦截规则

  (a)、判断是否包含timestamp、token、sign参数,若是不含或缺乏,则返回错误代码。

  (b)、判断服务器接到请求的时间和参数中的时间戳(timestamp)是否相差很长一段时间(时间自定义如半小时),若是超过则说明该url已通过期(若是url被盗,他改变了时间戳,可是会致使sign签名不相等)。

  (c)、判断token是否有效,根据请求过来的token,查询Redis缓存中的Uid,若是获取不到这说明token已过时。

  (d)、根据用户请求的url参数,服务器端按照一样的规则生成sign签名,对比签名是否相等,若是相等,则放行。(天然url签名,也没法100%保证其安全,也能够经过公钥AES对数据和url加密,但这样没法确保公钥丢失,因此签名只是很大程度上保证安全)。

  (e)、此url拦截只需对获取身份认证的url放行(如登陆url),其余全部的url都须要拦截。

相关文章
相关标签/搜索