接口鉴权
1.1 什么是鉴权?
鉴权是指验证用户是否有权利访问系统的行为。
什么是有状态连接:
http协议是一种无状态协议,就是说我的本次请求和上一次请求是没有任何关联的,无法去共享信息。举一个场景,我们用什么爱奇艺或者qq视频追剧的时候,比方说这个剧追到第十集了,那你下次在打开的时候你的爱奇艺肯定会告诉你,你上次看到的历史记录问你是不是要继续从第10集去看。那这种称之为有状态,也就是说他会把客户端上一次做的事情把它记录下来。那么无状态是这一次看到第10集了,下次进来了还是从第1集开始,就不会记录你的任何信息。就是说如果一个视频网站能够记录你观看到第几集,你可以理解为这种形式就是有状态的。那如果不能记住,他就是无状态。重点是服务器要花时间去帮你处理这个信息,因为记录的时候服务器会记住你这个用户的历史记录。因为有100个人可能同时追这个剧。那服务器就要记住100份。所以http协议在研发初期,就把它定义成无状态的。这样效率会高很多。随着这个互联网的发展,对于有状态的需求就比较大了。所以会引入一些技术去解决。公司里面研发的产品也好,还是我们平常用到的这些应用,大部分都是http协议的。比如说你的淘宝,京东啊,都是http协议。只不过有些会以加密的形式-https,但底层仍是http。京东淘宝要收集你的浏览记录,百度贴吧登录之后去发贴,里面也会有你浏览帖子的记录。那这些东西,其实都是由这三个技术实现。那么在这里面cookie是最简单也是最方便的一种技术啊。
1.cookie
Cookie 是在 HTTP 协议下,服务器或脚本可以维护用户信息的一种方式。Cookie 是由Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户访问到服务器,都会带上该服务器的cookie信息。
一般 Cookie 都是有效期的, Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除。
第一步:一般是第一次访问服务器的时候,服务器返回给客户端的,储存在客户端的一小段文本信息,文本格式为字典,kv键值对
第二步。第n+1次去访问,就要带上cookie;
它的类型有:会话级cookie:保存在内存,当浏览器关闭时会自动消失;
持久化cookie:保存在磁盘的当中,当浏览器关闭时不会自动消失,它的生命周期取决于失效时间;
缺点:服务器生成保存在客户端,对于一些重要信息,用户名和密码通过cookie保存不安全;
2.Session
第一次,当客户端登陆服务器时,服务器生成sessionid并且保存到服务器,然后在登录请求里就会把sessionid通过cookie传输给客户端;
第二步:后面所有的请求都会在请求头cookie里面使用sessionid,然后和服务器的sessionid进行对比实现鉴权;
sessionid在服务器默认的生命周期是半个小时,半个小时之后每登录一下seesionid不一样;
可以在tomcat的conf文件里的web.xml文件里看到;
Session将数据存储在服务器的内存当中,服务器会为每一个用户创建一条session,用户访问服务器的时候需要拿着sessionid去表明自己的身份。
Session的实现是基于Cookie, Session需要借助于Cookie来存储sessionID。用户名和密码都是保存在服务器上的,只是sessionid不一样,所以你保存在浏览器里,关闭浏览器后就没有了也不影响;
sessionid是每个客户端都有一个,token是所有的请求都只用一个
3.token
令牌。鉴权码;
1.如何实现或者鉴权?
第一步。一般是登录自动生成token或者通过一个单独的接口来生成token,然后保存在服务器的硬盘里,一般保存在服务器的硬盘里;
第二步。后面的所有请求都必须带上token(请求头,参数),然后和服务器的token进行对比实现鉴权。
为了防止别人截取token,所以有了加密方式;
4。加密
对称加密:DES,AES 可以解密
双钥加密:AES 可以解密qian'ming
MD5,SHA1 不可以解密
金融项目,银行项目,第三方支付:自定义加密规则,Sign签名;无法破解的
5.应用:
测试登录失效之后的反应,session的功能测试;
postman:自动管理;
接口自动化:token鉴权,接口关联;
接口自动化:request.get(cookie)
request.session()
web自动化:通过cookie实现万能验证码
6.相同点和不同点:
相同点:都是用于鉴权,通过服务器产生
不同点:
1.cookie储存在客户端,session储存在服务器内存,token储存在服务器硬盘,session和token的安全性比cookie高。
2.token的优势是比session更省资源,不需要管理sessionid.