1.cookie
cookie定义
cookie是服务器产生,存储在客户端的一小段文本(格式是字典)
cookie包含的内容
cookie包括信息:name,value,domain,path,expries,size
cookie分类
会话级:保存在内存,浏览器关闭便会被删除。
持久化:保存在磁盘,只有失效时间到了才会被删除。
cookie如何鉴权(原理)
当客户端第一次访问服务器,那么服务器产生cookie,然后通过响应头的方式set-cookie传输到客户端,客户端之后的请求都会带上这些cookie信息(请求头cookies)。
查看方式
开发者工具:application->storage->cookie
缺点
cookie保存在客户端,对于一些敏感信息并不安全(容易被篡改)
2.session
session定义
当客户端第一次访问服务器,然后服务器(内存)保存一个sessionId,这个sessionId经过加密,通过cookie把这个sessionId保存在客户端,之后请求服务器的时候带上sessionId(这时服务器会校验这个sessionI的是否和存储在服务器上的sessionId一致)
缺点
解决cookie不安全的问题,但是出现了新问题,当用户量特别大的时候存储在服务器端的sessionId会占用服务器大量资源(sessionId是保存在服务器内存里),导致服务器崩溃。
解决办法
当是服务器集群,可以有的办法:请求IP捆绑(某客户端只能访问一个服务器),sessionId复制(sessionId集中存储在某一个服务器),单点登录(sso,用户只需要登录一次就可以访问所有相互信任的应用系统)。
3.token
token定义
当用户登录之后,就给他一个token令牌,下次用户请求的时候,只需要带上这个令牌(可通过抓包获取)
token保存位置
保存在服务器的硬盘中(接口测试通过一个专门获取token的接口或者登录接口获取token,获取token之后每次请求其他接口都必须带上token)
token分类
access_token:有时间限制,限制在15分钟
refresh_token:一般在15天
加密方式
对称加密(私钥加密):DES AES base64
非对称加密(双钥加密):RSA 分公钥、私钥
只加密不解密:MD5 SHA系列
4.签名sign
更安全
签名定义
接口签名就是使用appid,appsecret,nonce(流水号),timestamp(时间戳),以及其他的各种参数按照一定的规则(一般是ASCII排序)组成用来识别你的账号有没有访问api接口的权限的字符串,组成之后再进行加密,这个经过加密的字符串就是sign签名。
流水号(nonce)是一串10位以上的随机一组数字或者随机的一组字符串。数字+字符串(guid)。
timestamp一般10分钟之内有效。
cookie session token相同点 不同点
相同点:都是用来做鉴权的,都是服务器产生
不同点:
1.cookie存储在客户端,session存储在服务器,session的安全性比cookie高,一般把重要信息放在session里,把不重要的放在cookie中。
2.session存在服务器内存里,token存在服务器的文件或数据库中,token的好处是比session更节省服务器资源,token只需要在服务器解密即可。
待完善
来源
参考文档:鉴权方式