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?.
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:
Depuis MacOS ou Linux:
echo -n "username:password" | base64
Depuis Windows:
Allez ici et encodez votre chaîne "nom d'utilisateur: mot de passe"
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]"
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)
É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));
Étape 3 Ajouter le gestionnaire d'en-tête HTTP
É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)
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
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
Assurez-vous de fournir un protocole pour l'URL de base, c'est-à-dire: " http: // localhost " au lieu de "localhost"
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 []
.
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
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));