Jmeter接口测试-JWT鉴权

登陆及jwt(json+web+token)鉴权

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: 登陆用户的id
  • username: 登陆用户的用户名
  • token: 用户登陆的凭证,登陆以后,全部的后续请求都必须包含该token。
{
  "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。

相关文章
相关标签/搜索