JMeterを使用したWebサービスの基本認証プロセスを暗示しようとしています。しかし、エラー401:Unauthorizedをスローするたびに。HTTPヘッダーマネージャーを使用して、ヘッダーの承認と値を追加してみました。それでも動作しません。HTTP認証マネージャーも使用してみました。まだ運がない。誰かが助けることができますか。
11 に答える
JMeter からのリクエストをデバッグしたところ、HTTP Authorization Manager モジュールがユーザー名とパスワードを正しくエンコードしていないことがわかりました。ユーザー名の後に改行文字を置きます。
基本認証で保護されたエンドポイントに対して JMeter テストを実行するには、HTTP ヘッダー マネージャーを含め、基本認証ヘッダーを自分で追加します。
クレデンシャルの手動エンコード
MacOS または Linux から:
echo -n "username:password" | base64
Windows から:
ここに移動して、「username:password」文字列をエンコードします
認証ヘッダーの追加
HTTP ヘッダー マネージャーで、名前が「承認」で値が「基本 [上記のエンコードされた資格情報]」のエントリを追加します。
JMeter 3.2 の 2017 年 8 月 19 日編集:
基本的に Basic Authorization をバイパスするには、 Authorizationヘッダーに値Basic base64(username:password)を追加する必要があります。問題は、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正しい値の Authorization ヘッダーを追加します
ヘッダー名Authorization
ヘッダー値Basic ${base64HeaderValue} (base64HeaderValue 変数は BeanShell プリプロセッサによって初期化されます)
したがって、最終的にhttpリクエストを作成すると、Authorizationヘッダーがbase64でエンコードされた文字列とともにサーバーに渡されます
以下をせよ:
1/すべての必須フィールドでHTTP Authorization Managerを正しく構成する
2/ オプション 1: HTTP 4 を使用: (デフォルト)
JMeter 3.2以降、Authorization Managerを使用してさらに構成することなく可能です
オプション 2: HTTP 3.1 の使用: (非推奨)
jmeter.properties で、コメントを外します:
httpclient.parameters.file=httpclient.parameters
httpclient.parameters で、コメントを外します:
http.authentication.preemptive$Boolean=true
JMeter を学びたい場合は、プロジェクトの 3 人の開発者によるこの本が役立ちます。
ベース URL のプロトコルを必ず指定してください。つまり、「localhost」ではなく「http://localhost」です。
ユーザー定義変数のユーザー名とパスワードを使用する @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));
上記の最初の回答を参照して、Apache 3.1 が HTTP Auth Manager でユーザー名:パスワードを正しくエンコードしているように見えるため、言及した誤ったエンコードの問題を修正する必要があります。
2013年の回答からの良い発見を更新します。
HTTP4 オプションは、以下を含む HTTP ヘッダー マネージャーの行を追加した後、現在の Jmeter バージョン 2.13 でも機能します。
name="Authorization", value="Basic [base64-encoded user/password string]"
apache 2.4 から tomcat8 へのリバース プロキシを持つ現在のホスト amazon linux で検証済み。tomcat8 は、401 ステータスをスローする代わりに、ユーザー資格情報を認識しました。