HTTP请求中@符号的含义及无客户端时Express+Node.js后端JWT令牌测试问题咨询
关于Express后端JWT测试及HTTP文件语法的解惑
首先,咱们先把你疑惑的那些特殊语法讲明白——这些不是标准HTTP协议的内容,而是API测试工具(比如VS Code的REST Client插件、JetBrains系列IDE的HTTP Client) 支持的.http/.rest文件专用语法,用来实现请求间的数据传递,非常适合后端接口的自动化测试。
1. # @name loginAdminCorrect 是什么?重要吗?
这行是给你的登录请求起一个唯一的名字,非常重要!后面的请求要引用这个登录请求的响应数据,全靠这个名字来定位。没有它,后续的变量赋值就找不到对应的请求结果了。
2. @adminToken = {{loginAdminCorrect.response.headers.Authorization}} 的作用
这行是工具的变量赋值语法:
@是用来声明自定义变量的前缀,这里声明了一个叫adminToken的变量{{loginAdminCorrect.response.headers.Authorization}}是引用语法,意思是:找到刚才命名为loginAdminCorrect的请求的响应,取出它的Authorization响应头的值,把这个值赋给adminToken变量
你的服务器会在登录成功后返回Authorization: Bearer <你的JWT令牌>,这行代码就是自动把这个真实生成的令牌存起来,给后续请求用,完全不是伪令牌!
3. 怎么用真实令牌完成后端测试?
你不需要写假令牌的逻辑,只要用支持HTTP文件的工具,按步骤操作就行:
- 把老师给的测试代码整理成一个
.http文件(比如test.http),内容如下:
### # @name loginAdminCorrect GET http://localhost:999/authenticate Authorization: Basic YWRtaW46MTIz @adminToken = {{loginAdminCorrect.response.headers.Authorization}} ### 携带管理员令牌列出所有用户 GET http://localhost:999/users Authorization: {{adminToken}}
- 确保你的Express服务器在
localhost:999运行 - 用VS Code的REST Client插件(或者JetBrains IDE的HTTP Client)打开这个文件,点击第一个请求上方的"Send Request"按钮,运行登录请求。工具会自动把返回的JWT令牌存到
adminToken里 - 然后点击第二个请求的"Send Request"按钮,工具会自动把
{{adminToken}}替换成刚才存的真实令牌,这样就用真实生成的JWT完成权限验证测试了
补充:为什么去掉@相关部分也能运行?
因为单独跑登录请求的时候,服务器本身就会验证凭证并返回令牌,和变量赋值无关——但如果要自动把令牌传递给后续请求,就必须保留@相关的语法,不然你得手动复制令牌到第二个请求的Authorization头里,效率很低。
这样你就能用真实的JWT令牌测试后端的权限控制逻辑,完全符合你的需求,不需要写任何假令牌的不安全代码~
内容的提问来源于stack exchange,提问作者Lucas Knäuper
相关产品推荐
相关产品推荐

