Базовая аутентификация JMeter

Я пытаюсь подразумевать базовый процесс аутентификации для веб-службы, использующей JMeter. Но каждый раз выдает ошибку 401: не авторизован. Я попытался с помощью диспетчера заголовков HTTP добавить заголовок авторизации и значение для него. Тем не менее это не работает. Я также попытался с помощью диспетчера авторизации HTTP. Все еще не повезло. Может кто-нибудь помочь.

11 ответов

В результате отладочных запросов, поступающих от JMeter, я обнаружил, что модуль диспетчера авторизации HTTP неправильно кодирует имя пользователя и пароль. Он ставит символ новой строки после имени пользователя.

Чтобы запустить тест JMeter для конечной точки, защищенной базовой аутентификацией, включите диспетчер заголовков HTTP и добавьте заголовок базовой аутентификации самостоятельно:

Кодирование учетных данных вручную

  • Из MacOS или Linux:

    echo -n "username:password" | base64

  • Из Windows:

    Перейдите сюда и закодируйте свою строку "username:password"

Добавление заголовка авторизации

В диспетчере заголовков HTTP добавьте запись с именем "Авторизация" и значением "Основные [закодированные учетные данные сверху]"

Редактировать 19 августа 2017 года для JMeter 3.2:

В основном, чтобы обойти базовую авторизацию, необходимо добавить заголовок авторизации со значением Basic base64(имя пользователя: пароль). Проблема в том, что в JMeter нет встроенной функции base64.

Решение:

Шаг 1 Добавление препроцессора BeanShell (PreProcessor -> Препроцессор BeanShell)

Шаг 2 Добавьте следующий скрипт в PreProcessor

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

Шаг 3 Добавьте менеджер заголовка HTTP

Шаг 4 Добавьте заголовок авторизации с правильным значением

Название заголовка Авторизация
значение заголовка Basic $ {base64HeaderValue} (переменная base64HeaderValue инициализируется препроцессором BeanShell)

Таким образом, в конце концов, когда вы создаете запрос http, заголовок авторизации будет передан на сервер с строкой в ​​кодировке base64

Сделайте следующее:

  • 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
    

Убедитесь, что вы указали протокол для базового URL, а именно: " http://localhost/" вместо "localhost"

Вы можете легко использовать JSON Extractor для аутентификации внутри запроса аутентификации, чтобы сохранить токен в переменной, тогда вам просто нужно будет использовать его всякий раз, когда токен необходим, чтобы использовать его, вам понадобится менеджер заголовков HTTP, использующий эту переменную, которую вы можете следить за скриншотами для получения четких инструкций.

Конфигурация экстрактора JSON: конфигурация диспетчера заголовков HTTP:

Я использую Jmeter 3.3

Перейдите к Jmeter при выборе пользователя, выберите "Добавить", затем "Диспетчер авторизации HTTP".

Затем добавьте URL-адрес, идентификатор пользователя, пароль

Если тип ответа - json, добавьте диспетчер заголовков HTTP.

Как сказал Райан Т, в диспетчере заголовков HTTP добавьте запись с именем "Authorization" и значение "Basic [encoded credentials from above]" но без [],

Если вы получите код ответа 401, то добавьте элемент конфигурации "Диспетчер авторизации HTTP".

В связи с первым ответом выше, проблема с неправильной кодировкой, которую вы упоминаете, теперь должна быть исправлена, так как Apache 3.1 действительно правильно кодирует имя пользователя: пароль в HTTP Auth Manager

Добавление небольшого изменения @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));

Обновление хороших результатов из ваших ответов 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.

Другие вопросы по тегам