我试图暗示使用 JMeter 的 Web 服务的基本身份验证过程。但每次它抛出一个错误401:未经授权。我尝试使用 HTTP 标头管理器向其添加标头授权和值。它仍然不起作用。我也尝试过使用 HTTP 授权管理器。仍然没有运气。有人可以帮忙吗。
11 回答
我通过调试来自 JMeter 的请求发现 HTTP 授权管理器模块没有正确编码用户名和密码。它在用户名之后放置一个换行符。
要针对受基本身份验证保护的端点运行 JMeter 测试,请包含 HTTP 标头管理器并自己添加基本身份验证标头:
手动编码凭证
从 MacOS 或 Linux:
echo -n "username:password" | base64
从 Windows:
去这里编码你的“用户名:密码”字符串
添加授权标头
在 HTTP 标头管理器中,添加一个名为“Authorization”且值为“Basic [来自上面的编码凭据]”的条目
为 JMeter 3.2 编辑 2017 年 8 月 19 日:
基本上要绕过基本授权,您需要添加值为Basic base64(username:password)的Authorization标头。问题是 JMeter 没有嵌入 base64 函数。
解决方案是:
Step1添加BeanShell PreProcessor(PreProcessor --> BeanShell Preprocessor)
Step2将以下脚本添加到 PreProcessor
import org.apache.commons.codec.binary.Base64;
byte[] encodedUsernamePassword = Base64.encodeBase64("neo4j:1234".getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
Step3添加HTTP头管理器
Step4添加具有正确值的授权标头
header 名称Authorization
header value Basic ${base64HeaderValue} (base64HeaderValue 变量由 BeanShell 预处理器初始化)
所以最后当你创建一个 http 请求时,Authorization 标头将使用 base64 编码的字符串传递给服务器
请执行下列操作:
1/使用所有必填字段正确配置HTTP 授权管理器
2/ 选项 1:使用 HTTP 4:(默认)
从 JMeter 3.2 开始,无需使用授权管理器进行任何进一步配置即可
选项 2:使用 HTTP 3.1:(已弃用)
在 jmeter.properties 中,取消注释:
httpclient.parameters.file=httpclient.parameters
在 httpclient.parameters 中,取消注释:
http.authentication.preemptive$Boolean=true
如果你想学习 JMeter,这本书由项目的 3 位开发人员编写,将为你提供帮助
确保为基本 URL 提供协议,即:“ http://localhost ”而不是“localhost”
正如 Ryan T 所说,在 HTTP 标头管理器中,添加一个带有名称"Authorization"
和值"Basic [encoded credentials from above]"
但没有[]
.
添加使用用户定义变量中的用户名和密码的@yurko 的细微变化。(对于 3.2 之前的 Jmeter)
import org.apache.commons.codec.binary.Base64;
String username = vars.get("USERNAME");
String password = vars.get("PASSWORD");
String combineduserpass = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(combineduserpass.getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
参考上面的第一个答案,现在必须修复您提到的不正确编码问题,因为 Apache 3.1 确实在 HTTP Auth Manager 中正确编码了 username:password
更新您 2013 年答案的良好发现:
添加 HTTP Header Manager 行后,HTTP4 选项也适用于当前 Jmeter 版本 2.13 ,其中包含:
name="Authorization", value="Basic [base64-encoded user/password string]"
在当前主机 amazon linux 上验证,具有从 apache 2.4 到 tomcat8 的反向代理;tomcat8 识别用户凭据而不是抛出 401 状态。