JMeter基本身份验证

JMeter基本身份验证,jmeter,authorization,http-authentication,Jmeter,Authorization,Http Authentication,我试图使用JMeter暗示web服务的基本身份验证过程。但每次它都会抛出一个错误401:未经授权。我尝试使用HTTP头管理器向其添加头授权和值。但它仍然不起作用。我还尝试过使用HTTP授权管理器。还是不走运。有人能帮忙吗。请执行以下操作: 1/正确配置所有必填字段 2/ 选项1:使用HTTP 4:(默认) 这是可能的,因为JMeter 3.2不需要使用授权管理器进行任何进一步的配置 选项2:使用HTTP 3.1:(已弃用) 在jmeter.properties中,取消注释: httpcli

我试图使用JMeter暗示web服务的基本身份验证过程。但每次它都会抛出一个错误401:未经授权。我尝试使用HTTP头管理器向其添加头授权和值。但它仍然不起作用。我还尝试过使用HTTP授权管理器。还是不走运。有人能帮忙吗。

请执行以下操作:

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

  • 2/ 选项1:使用HTTP 4:(默认)

  • 这是可能的,因为JMeter 3.2不需要使用授权管理器进行任何进一步的配置

选项2:使用HTTP 3.1:(已弃用)

  • 在jmeter.properties中,取消注释:

    httpclient.parameters.file=httpclient.parameters
    
    http.authentication.preemptive$Boolean=true
    
  • 在httpclient.parameters中,取消注释:

    httpclient.parameters.file=httpclient.parameters
    
    http.authentication.preemptive$Boolean=true
    

如果您想学习JMeter,那么本项目的3位开发人员编写的这篇文章将帮助您

通过调试来自JMeter的请求,我发现HTTP授权管理器模块没有正确编码用户名和密码。它在用户名后加一个换行符

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

手动编码凭据
  • 从MacOS或Linux:

    echo-n“用户名:密码”| base64

  • 从Windows:

    去编码你的“用户名:密码”字符串

添加授权标头
在HTTP头管理器中,添加一个名为“Authorization”且值为“Basic[从上面编码的凭据]”

的条目,如Ryan T所说,在HTTP头管理器中,添加一个名为
“Authorization”
且值为
“Basic[从上面编码的凭据]”
但不包含
[]

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

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

HTTP4选项在当前Jmeter版本2.13下也可以工作 添加包含以下内容的HTTP标头管理器行后:

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

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

为JMeter 3.2编辑2017年8月19日:

  • 使用答案
基本上,要绕过基本授权,您需要使用值Basic base64(用户名:密码)添加Authorization标题。问题是JMeter没有嵌入base64函数

解决办法是:

步骤1添加BeanShell预处理器(预处理器-->BeanShell预处理器)

步骤2将以下脚本添加到预处理器

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

步骤3添加HTTP头管理器

步骤4添加具有正确值的授权标头

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

因此,在最后创建http请求时,授权头将以base64编码的字符串传递给服务器


添加了@yurko的细微变化,它使用用户定义变量中的用户名和密码。(对于3.2之前的Jmeter)


参考上面的第一个答案,您提到的不正确的编码问题现在必须得到修复,因为Apache 3.1在HTTP Auth Manager中似乎对用户名:密码进行了正确编码,如果您得到的响应代码为401,则添加“HTTP Authorization Manager”配置元素 我使用的是Jmeter 3.3

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

然后添加url、用户ID和密码

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


天哪,谢谢你的回答。这对我来说很管用,不过,我唯一的抱怨是,你需要对像我这样的人隐瞒你的答案;)起初我不明白你要我们做什么,但幸运的是,通过反复试验和重新阅读你的答案,不知何故,我无意中得到了正确的命令。我使用邮递员进行了初步测试。我只是复制了他们的授权头&编码值,并将其放入HTTP头管理器中。很高兴知道有一个网站会为你编码!对我也有用@戴比,请把这个答案标记为解决方案。这就是为什么它对我不起作用的原因。我从我的HTTP请求中复制了基本URL,它也可以在不提供协议的情况下工作。它对我很有效,这是一个很好的答案,有很多图片:-)。非常感谢。感谢您为发布此详细答案所做的努力,因为JMeter 3.2不再需要了,请参见“是的,我使用的是JMeter 3.2,我只在“HTTP基本身份验证”中添加了清晰的用户名和密码,它会自动转换为标准的“基本授权”[base64编码的用户名:密码]'在HTTP头中。自JMeter 3.2以来不再需要,请参阅自JMeter 3.2以来不再需要,请参阅感谢!我已经好几个月没更新了。我很高兴他们让这变得更容易。从JMeter 4.0开始,您可以使用Http授权管理器或JSR223预处理器,如下所述: