关于手机app之api认证

转载于未知名博客api

 

出于安全kao虑,近期推动一次app和api间通信的认证的流程。舍弃了app认证这种思路,走的用户受权的思路。安全

具体流程以下:服务器

  1. 就是app第一次启动时,向服务器请求得到accessId 受权id,accessToken 受权token,accessExp 受权过时时间。 app

  2. 接口请求的时候,将参数,时间戳,accessToken哈希,做为sign附加在参数上。(若是上https,只要将accessToken附加返回就行了) spa

  3. 当用户登陆的时候,将用户id和accessId关联,存于服务器端。 token

  4. 操做用户数据接口获取到用户id后校验和accessId关联的用户id比较是否一致。 接口

  5. 之后手机启动的时候,拿保存的access信息,请求更新接口,获取新的access信息。 内存

 

kao虑的安全问题:博客

  1. 数据私密性,让数据在传输过程当中不可见,避免偷窥狂,解决办法是上https,第一期不作。 hash

  2. 数据完整性,防止数据发出后被篡改,解决办法是上https,第一期特么不上https,第二期又不知道在哪里。因此,将全部参数,加上时间戳,和access_token拼接后进行hash获得sign,附加在请求里面。服务端对sign进行校验。保证参数不被篡改。 

  3. 请求幂等性,一个请求只请求一次有效,例如A给B转帐,这个请求调用屡次,只会转帐一笔。经过accessId,接口,时间戳做为惟一判断来避免重放。 

  4. 密钥泄漏,app被反编译,密钥丢了怎么办,因此舍弃app受权,改用对用户受权。 

  5. 内存修改器,app若是直接持有memberId与服务端通信,假如memberId被修改,防线瞬间就瓦解了,因此不以app持有的memberId为凭证,而是以accessId关联的memberId为准。

相关文章
相关标签/搜索