Jmeter接⼝测试-JWT鉴权
登录及jwt(json+web+token)鉴权
Web的登录鉴权⽅式(cookie base):
HTTP的特性:短连接、是⽆状态的、每次发送的请求都是新的,服务器⽆法知道每次请求是哪个⽤户发送的?那么如何才能知道每次发送的请求是哪个⽤户发送的呢?    --- 通过session实现
(客户端)
client(web) ------------>server
(服务端)
⽹站调⽤登录接⼝传⼊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过期机制,这个⽅法并不简单。那么有没有什么更简单的办法呢?
⼀个请求(包含username/password)发送给服务器,服务器会鉴权,这时候没有session这时候通过username/password知道哪个⽤户登录,然后将⽤户信息加密(加密成⼀个token-类似字符串)然后把token发送给客户端-客户端把token保存起来,之后每⼀次发送服务端的请求都带上token,服务器端收到token以后可以通过token反解出来这个⽤户是谁?及过期时间,⽐如token是否在过期时间之内,如果已经超过过期时间就实效了,在发送⼀个新的token给我。
这种⽅式的优势和劣势:
在服务器端没有开任何的session,没有什么空间开销,撑得⽤户数会多⼀些。但是解token会占⽤cpu,消耗时间。
思考⼀个问题:http请求通过什么⽅式把token发到服务器?
⼀般把token放到header中发送到服务器。在访问需要鉴权的接⼝时,我们将token放到http请求的header中,如果该token是有效的,那么接⼝正常返回,否则接⼝返回401错误。
实现
POST /login username/password这个接⼝提供了登录功能。
如果username和password组合是正确的,该接⼝将返回如下的信息
id: 登录⽤户的id
username: 登录⽤户的⽤户名
token: ⽤户登录的凭证,登录之后,所有的后续请求都必须包含该token。
{
app接口测试工具"id":2,
"username":"admin",
"token":"J1c2VybmFtZSI6ImFkbWluIiwiaWQiOjIsImlhdCI6MTQ3MzQ5Nzc1MCwiZXhwIjoxNTU5ODk3NzUwfQ.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。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。