JMeter基本身份验证

时间:2012-09-24 07:20:56

标签: jmeter authorization http-authentication

我试图暗示使用JMeter的Web服务的基本身份验证过程。但每次它抛出错误401:未经授权。我尝试使用HTTP标头管理器向其添加标头授权和值。它仍然无效。我也尝试过使用HTTP授权管理器。仍然没有运气。有人可以帮忙。

10 个答案:

答案 0 :(得分:48)

我通过调试来自JMeter的请求发现HTTP Authorization Manager模块没有正确编码用户名和密码。它在用户名后面添加换行符。

要对基本身份验证保护的端点运行JMeter测试,请包含HTTP标头管理器并自行添加基本身份验证标头:

手动编码凭证

  • 从MacOS或Linux:

    echo -n "username:password" | base64

  • 来自Windows:

    转到here并对您的“用户名:密码”字符串进行编码

添加授权标头

在HTTP标头管理器中,添加名称为“授权”的条目和值“基本[上面的编码凭证]”

答案 1 :(得分:31)

编辑JMeter 3.2的2017年8月19日

基本上要绕过基本授权,您需要添加值基本base64(用户名:密码)授权标头。问题是JMeter没有嵌入base64功能。

解决方案是:

Step1 添加 BeanShell预处理器(预处理器 - > BeanShell预处理器)

enter image description here

Step2 将以下脚本添加到PreProcessor

import org.apache.commons.codec.binary.Base64;
byte[] encodedUsernamePassword = Base64.encodeBase64("neo4j:1234".getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));

enter image description here

Step3 添加HTTP标头管理器

enter image description here

Step4 添加具有正确值的授权标头

标题名称授权
标头值基本$ {base64HeaderValue} (base64HeaderValue变量由BeanShell预处理器初始化)

enter image description here

所以最后当你创建一个http请求时,Authorization头会被传递给带有base64编码字符串的服务器

enter image description here

答案 2 :(得分:7)

执行以下操作:

  • 1 /正确配置HTTP Authorization Manager所有必填字段

  • 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
    

答案 3 :(得分:2)

确保为基本URL提供协议,即:“http://localhost”而不是“localhost”

答案 4 :(得分:1)

像Ryan T所说,在HTTP标头管理器中,添加一个名称为"Authorization"且值为"Basic [encoded credentials from above]"但不包含[]的条目。

答案 5 :(得分:0)

添加使用用户名&的@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));

答案 6 :(得分:0)

In reference to the first answer above, the incorrect encoding problem you mention must be now fixed, as Apache 3.1 does appear to encode the username:password correctly in HTTP Auth Manager

答案 7 :(得分:0)

如果获得的响应代码为401,则添加“ HTTP授权管理器”配置元素 enter image description here

答案 8 :(得分:0)

我正在使用Jmeter 3.3

在用户上转到Jmeter,选择添加,然后选择HTTP授权管理器

enter image description here

然后添加您的网址,用户名,密码

enter image description here

如果响应类型为json,则添加HTTP标头管理器

enter image description here

答案 9 :(得分:-1)

更新2013年答案中的好结果:

HTTP4选项也适用于当前的Jmeter 2.13版本 添加HTTP Header Manager行后包含:

name="Authorization", value="Basic [base64-encoded user/password string]"

已验证当前主机amazon linux具有从apache 2.4到tomcat8的反向代理; tomcat8识别用户凭据而不是抛出401状态。