web-dev-qa-db-fra.com

Authentification de base JMeter

J'essaie d'impliquer le processus d'authentification de base pour un service Web utilisant JMeter. Mais à chaque fois, il génère une erreur 401: non autorisé. J'ai essayé d'utiliser le gestionnaire d'en-tête HTTP pour y ajouter une autorisation d'en-tête et une valeur. Cela ne fonctionne toujours pas. J'ai également essayé d'utiliser le gestionnaire d'autorisation HTTP. Toujours pas de chance. Quelqu'un peut-il aider?.

32
Depy

J'ai trouvé grâce aux requêtes de débogage provenant de JMeter que le module HTTP Authorization Manager ne code pas correctement le nom d'utilisateur et le mot de passe. Il place un caractère de nouvelle ligne après le nom d'utilisateur.

Pour exécuter un test JMeter sur un point de terminaison protégé Basic Auth, incluez le gestionnaire d'en-tête HTTP et ajoutez vous-même l'en-tête Basic Auth:

Informations d'identification à codage manuel

  • Depuis MacOS ou Linux:

    echo -n "username:password" | base64

  • Depuis Windows:

    Allez ici et encodez votre chaîne "nom d'utilisateur: mot de passe"

Ajout de l'en-tête d'autorisation

Dans le gestionnaire d'en-tête HTTP, ajoutez une entrée avec le nom "Autorisation" et la valeur "De base [informations d'identification codées ci-dessus]"

49
user480918

Modifiez le 19 août 2017 pour JMeter 3.2 :

Fondamentalement, pour contourner une autorisation de base, vous devez ajouter l'en-tête Autorisation avec la valeur Base64 de base (nom d'utilisateur: mot de passe) . Le problème est que JMeter n'a pas de fonction base64 intégrée.

La solution est:

Étape 1 Ajouter BeanShell PreProcessor (PreProcessor -> BeanShell Preprocessor)

enter image description here

Étape 2 Ajoutez le script suivant au préprocesseur

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

enter image description here

Étape 3 Ajouter le gestionnaire d'en-tête HTTP

enter image description here

Étape4 Ajouter un en-tête d'autorisation avec la valeur correcte

nom d'en-tête Autorisation
valeur d'en-tête Basic $ {base64HeaderValue} (la variable base64HeaderValue est initialisée par le préprocesseur BeanShell)

enter image description here

Donc, à la fin, lorsque vous créez un en-tête d'autorisation de demande http, il sera transmis au serveur avec une chaîne codée en base64

enter image description here

33
yurko

Procédez comme suit:

  • 1/Configurer HTTP Authorization Manager correctement avec tous les champs obligatoires

  • 2/Option 1: En utilisant HTTP 4: (par défaut)

  • il est possible depuis JMeter 3.2 sans aucune configuration supplémentaire à l'aide du Gestionnaire d'autorisations

Option 2: En utilisant HTTP 3.1: (obsolète)

  • dans jmeter.properties, décommentez:

    httpclient.parameters.file=httpclient.parameters
    
  • dans httpclient.parameters, décommentez:

    http.authentication.preemptive$Boolean=true
    
7
UBIK LOAD PACK

Assurez-vous de fournir un protocole pour l'URL de base, c'est-à-dire: " http: // localhost " au lieu de "localhost"

2
esteewhy

Comme l'a dit Ryan T, dans le gestionnaire d'en-tête HTTP, ajoutez une entrée avec le nom "Authorization" et la valeur "Basic [encoded credentials from above]" mais sans [].

1
user2910552

En référence à la première réponse ci-dessus, le problème de codage incorrect que vous mentionnez doit maintenant être corrigé, car Apache 3.1 semble coder correctement le nom d'utilisateur: mot de passe dans HTTP Auth Manager

0
Scott Stingel

Si vous obtenez le code de réponse 401, ajoutez l'élément de configuration "Gestionnaire d'autorisations HTTP" enter image description here

0
S Krishna

Ajout d'une légère variation de @yurko qui utilise le nom d'utilisateur et le mot de passe des variables définies par l'utilisateur. (pour Jmeter avant 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));
0
Marcel Wilson