标签:
一:从传输协议上来说
保证登录的安全性,最好使用HTTPS
Secure Hypertext Transfer Protocol
安全超文本传输协议,需要申请证书
二:流程模型
(1)服务器接受到APP发送的用户名和密码,验证用户名和密码是否正确
如果验证正确,生成一个随机的不重复的TOKER字符串,在redis里面维护一个映射表比如token=>id
(2)服务器把token字符串返回给app,app把这个token字符串保存起来,作为登录的验证
(3)当需要验证用户的身份操作时候,必须把token传给服务器验明正身,服务器用这个token来和用户信息对应起来
(4)当用户退出之后将token以及映射删除
大致模型是这个样,从中我们发现,只要把url获取下来就能获取token来模拟,下面我们使用url签名来进一步优化
三:URL签名
上面的模型依赖与token,如果url泄漏那么token也同样泄漏
如何放置泄漏呢,我们可以不让token在网上传输
大致步骤:
(1)在服务器验证用户名密码之后,将token和id返回给客户端
(2)将token字符串与ID进行MD5签名,那么传输的时候就是sign=”MD5”&id=x
(3)当服务器接受到请求的时候,再使用相同的签名方式来验证,发现相等的话则继续执行
(4)还有一个问题当别人截取到这个请求时候就可以使用相同的请求地址来反复调用,所以我们可以在加上一个时间戳来放置反复调用
在APP启动时候将本地时间与服务器时间同步,时间差距太长的话则失效
存在风险:
(1)用户第一次验证账号密码时候是明文返回,有被截取的风险
(2)url签名只能保护token值,却无法保护其他的敏感信息
四:使用AES对称加密来保护信息
单密钥,在客户端加密,在服务端解密
当第一次用户名密码验证成功之后,返回token+aes密钥,以后请求都可以用aes(token+内容)来进行传递
标签:
原文地址:http://www.cnblogs.com/wuwulalala/p/5454942.html