53

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

4

11 回答 11

61

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

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

手动编码凭证

  • 从 MacOS 或 Linux:

    echo -n "username:password" | base64

  • 从 Windows:

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

添加授权标头

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

于 2013-03-21T21:24:17.887 回答
49

为 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 编码的字符串传递给服务器

在此处输入图像描述

于 2016-01-12T15:11:09.483 回答
10

请执行下列操作:

  • 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 位开发人员编写,将为你提供帮助

于 2012-09-24T10:59:22.233 回答
2

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

于 2015-06-11T11:32:09.330 回答
1

正如 Ryan T 所说,在 HTTP 标头管理器中,添加一个带有名称"Authorization"和值"Basic [encoded credentials from above]"但没有[].

于 2014-08-29T13:10:48.640 回答
1

如果您得到响应代码为 401,则添加“HTTP 授权管理器”配置元素 在此处输入图像描述

于 2019-03-04T12:53:20.523 回答
0

您可以轻松地在 auth 请求中使用JSON Extractor进行身份验证,以将令牌存储在变量中,然后您只需要在需要令牌时使用它,为了使用它,您将需要一个使用该变量的HTTP 标头管理器可以按照屏幕截图获得明确的说明。

JSON 提取器配置: HTTP 标头管理器配置:JSON 提取器 HTTP 标头管理器

于 2021-12-03T05:08:30.600 回答
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));
于 2016-10-04T17:41:07.950 回答
0

参考上面的第一个答案,现在必须修复您提到的不正确编码问题,因为 Apache 3.1 确实在 HTTP Auth Manager 中正确编码了 username:password

于 2017-02-11T16:08:41.920 回答
0

我正在使用 Jmeter 3.3

转到 Jmeter on User 选择 add 然后 HTTP Authorization Manager

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

于 2019-11-20T19:01:12.260 回答
-1

更新您 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 状态。

于 2016-01-08T20:25:55.777 回答