Web的登陆鉴权方式(cookie base):
HTTP的特性:短链接、是无状态的、每次发送的请求都是新的,服务器没法知道每次请求是哪一个用户发送的?那么如何才能知道每次发送的请求是哪一个用户发送的呢? --- 经过session实现web
(客户端)
client(web) ------------>server
(服务端)json
网站调用登陆接口传入username、password 到达服务器端此时服务器会鉴权,鉴权经过此时服务器会产生一个session,此时这个session是有一个sessionid的,而后服务器将这个session加密后经过set-cookie的方式发送给客户端(从cookie里面发送,一串相似指纹的token)客户端把token解出来之后能够知道在服务端对应的sessionid是哪个,以后每一次发送的请求都会带上cookie,cookie里面的信息是token,服务器看到token之后会把token和session进行关联起来。这样服务器就能够知道那个用户登陆了,用户是谁。登陆态是在cookie中,清掉cookie须要从新登陆。cookie是存在哪里呢?--浏览器中浏览器
App的登陆鉴权方式(token base):服务器
(客户端)
client(app) ------------>server
(服务端)cookie
经过服务器发送一个数据:本地存文件-相似cookie方式
服务器端会实现一套cookie过时机制,这个方法并不简单。那么有没有什么更简单的办法呢?session
一个请求(包含username/password)发送给服务器,服务器会鉴权,这时候没有session这时候经过username/password知道哪一个用户登陆,而后将用户信息加密(加密成一个token-相似字符串)而后把token发送给客户端-客户端把token保存起来,以后每一次发送服务端的请求都带上token,服务器端收到token之后能够经过token反解出来这个用户是谁?及过时时间,好比token是否在过时时间以内,若是已经超过过时时间就实效了,在发送一个新的token给我。app
这种方式的优点和劣势:
在服务器端没有开任何的session,没有什么空间开销,撑得用户数会多一些。可是解token会占用cpu,消耗时间。测试
思考一个问题:http请求经过什么方式把token发到服务器?
通常把token放到header中发送到服务器 。在访问须要鉴权的接口时,咱们将token放到http请求的header中,若是该token是有效的,那么接口正常返回,不然接口返回401错误。网站
实 现加密
POST /login username/password这个接口提供了登陆功能。
若是username和password组合是正确的,该接口将返回以下的信息
{ "id":2, "username":"admin", "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWQiOjIsImlhdCI6MTQ3MzQ5Nzc1MCwiZXhwIjoxNTU5ODk3NzUwfQ.CkxZAESKLNVu8FOOkxqdbpBukl2FFteAvPWOQulXPgc" }
1.咱们将注册的API接口停掉,避免每次都注册。由于咱们要验证的是登陆接口。咱们如今取一个注册已经好的用户名和密码登陆系统user_251,user251,以下图所示:
2.运行结果后,查看结果树查看咱们发送的请求是否发送成功,返回token是否成功。
如上图所示,咱们登陆接口发送的请求成功,而且返回了一个token这个token是加密过得。那么咱们接下来如何获取这个token的值呢呢?当热,咱们能够经过变量的方式获取token的值,具体请看下面的操做。
3.咱们在登陆请求右键---添加--后置处理器--选择json extractor 方式来获取token的值
4.在json extractor中须要进行以下设置,咱们在variablenames中设置一个变量名,方便后面引用这个变量名,而后获取token的值$.token表明的是从根下面取第一个token值,找不到就报错:NOT FOUND
咱们设置的变量名token,获取这个token变量的目的是方便在后面使用,很重要哦!因此,先暂时介绍到这里。咱们继续聊正题!
5.设置完成后,咱们须要作登录后的断言,没有断言的接口测试是不严谨的。这里咱们使用jmeter提供给咱们的“响应断言”,由于这种的方式比较简单,好理解,也能解决实际问题。如图所示,咱们添加一个响应断言:
6.响应断言里面参数设置以下图所示:
7.验证断言是否成功,咱们再次运行登录接口请求API。