Я пытаюсь использовать базовый процесс аутентификации для веб-службы с помощью JMeter. Но каждый раз он выдает ошибку 401: Несанкционированный. Я попытался использовать диспетчер заголовков HTTP, чтобы добавить в него заголовок "Авторизация" и значение. Тем не менее это не работает. Я также попытался использовать диспетчер авторизации HTTP. Еще не повезло. Может кто-то помочь.
Базовая аутентификация JMeter
Ответ 1
Я нашел через отладочные запросы, поступающие из JMeter, что модуль HTTP Authorization Manager не правильно кодирует имя пользователя и пароль. Он помещает символ новой строки после имени пользователя.
Чтобы запустить тест JMeter с защищенной конечной точкой Basic Auth, включите диспетчер заголовков HTTP и добавьте основной заголовок Auth:
Вручную кодировка учетных данных
-
В MacOS или Linux:
echo -n "username:password" | base64
-
Из Windows:
Перейти здесь и закодировать строку "имя пользователя: пароль"
Добавление заголовка авторизации
В диспетчере заголовков HTTP добавьте запись с именем "Авторизация" и значением "Основные [закодированные учетные данные сверху]"
Ответ 2
Редактировать 19 августа 2017 для JMeter 3.2:
- Использовать ответ fooobar.com/questions/193620/...
В основном, чтобы обойти базовую авторизацию, вам нужно добавить заголовок Авторизация со значением Basic base64 (имя пользователя: пароль). Проблема в том, что JMeter не имеет встроенной функции base64.
Решение:
Шаг1 Добавьте предварительный процессор BeanShell (PreProcessor → Препроцессор BeanShell)
Шаг2 Добавьте следующий script в PreProcessor
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
Ответ 3
Выполните следующие действия:
-
1/Настроить HTTP Authorization Manager правильно со всеми обязательными полями
-
2/ Вариант 1: Использование HTTP 4: (по умолчанию)
-
это возможно, поскольку JMeter 3.2 без дополнительной настройки с помощью диспетчера авторизации
Вариант 2: Использование HTTP 3.1: (устарело)
-
в jmeter.properties, uncomment:
httpclient.parameters.file=httpclient.parameters
-
в параметрах httpclient.parameters, uncomment:
http.authentication.preemptive$Boolean=true
Ответ 4
Обязательно укажите протокол для базового URL, т.е.: " http://localhost" вместо "localhost"
Ответ 5
Как сказал Райан Т, в диспетчере заголовков HTTP добавьте запись с именем "Authorization"
и значением "Basic [encoded credentials from above]"
, но без []
.
Ответ 6
Добавление небольшой вариации @yurko, которая использует имя пользователя и пароль из пользовательских переменных. (для Jmeter до 3.2)
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));
Ответ 7
В связи с первым ответом, приведенным выше, некорректная проблема кодирования должна быть исправлена, так как Apache 3.1 действительно правильно кодирует имя пользователя: пароль в HTTP Auth Manager
Ответ 8
Обновление хороших результатов из ваших ответов 2013 года:
Опция HTTP4 также работает в текущей версии Jmeter версии 2.13 после добавления строки заголовка HTTP Header, содержащей:
name="Authorization", value="Basic [base64-encoded user/password string]"
Проверено на текущем узле amazon linux с обратным прокси от apache 2.4 до tomcat8; tomcat8 распознал учетные данные пользователя вместо того, чтобы метать статус 401.