Chapter 15Lesson 04~185 minutes

Web Services, SOAP, Authentication, Tokens, and Session Workflows: Diagnostics, Failure Modes, and Production Practices

Authentication failures can come from bad credentials, wrong token/session pairing, expiry, missing cookies, TLS trust, rate limits, or JMeter scope. Preserve the first failure and reconstruct identity state before adding retries, sharing tokens, weakening TLS, or increasing load.

DiagnosticsToken leakageIdentity loadTLS safetySOAP scope

Learning objectives

  • Diagnose credentials/tokens embedded in JMX or CLI.
  • Recognize one shared token across all users as a state-model defect.
  • Reject TLS-verification weakening as an authentication workaround.
  • Detect accidental login-per-request and identity-provider hammering.
  • Prevent Authorization/cookie values from entering retained artifacts.
  • Diagnose ignored expiry and SOAP/XML assertion scope errors.

1. Preserve safe first-failure evidence

Diagnostic reruns remain on http://127.0.0.1:8000, ≤2 threads, one journey. Preserve JTL, jmeter.log, resolved non-secret configuration, fake credential identity, token fingerprint/session ID, redacted target events, sampler labels/statuses, generator CPU/memory, and target auth metrics. Do not copy raw token/password values into support logs.

2. Diagnostic sequence

Authentication/session diagnostic sequence

Identity state is owned by one virtual user. The cookie jar and extracted bearer/refresh tokens belong to that thread unless the real system explicitly defines shared identity.

flowchart TD
E[Preserve redacted JTL/log/target evidence] --> V[Confirm JMeter/Java/plugin/tool versions]
V --> C[Confirm JMX/data/properties/CLI + authorized target]
C --> S[Inspect Cookie/Header/Auth manager scope]
S --> I[Map username -> session ID -> token fingerprint]
I --> P[Inspect status + JSON/SOAP fault + expiry reason]
P --> G[Inspect generator CPU/GC/save-service]
G --> T[Inspect SUT/IdP metrics/rate limits]
T --> X[Distributed/CI/container state]
X --> F[Least destructive correction]
F --> R[Small bounded rerun + leak scan]

3. Failure mode: real password/token embedded in JMX or CLI

Command-line password properties can appear in shell history/process listings; literal bearer headers are stored in JMX. Authorization Manager also stores directly configured passwords unencrypted.

In a real authorized environment, use approved runtime secret injection. The Academy uses fake CSV credentials so no external secret manager is required.

4. Intentionally broken example: one token shared globally

Setup thread logs in as user01
Global property stores one access token
Every workload thread sends that same token
Each thread has a different/no Cookie Manager session

Symptoms: invalid_session/invalid_token, all requests map to one token fingerprint, or every user appears as user01. Repair: per-thread fake credential login, thread-local token variables, and per-thread Cookie Manager state.

5. Failure mode: disabling TLS verification

A TLS handshake failure occurs before application authentication. Do not weaken JVM certificate algorithms, disable verification, or route around HTTPS. Repair the truststore/certificate/protocol in the authorized environment.

6. Failure mode: login on every request

If Login sits inside a 100-count protected-operation loop, IdP requests multiply 100× per session. Identity latency/rate limits dominate the workload and generator repeatedly parses tokens.

Move Login outside the inner business loop and refresh only when required.

7. Failure mode: hammering the identity provider

An enterprise IdP can lock test accounts or protect itself with stricter rate limits. Use only a dedicated authorized performance tenant, a local mock, or pre-established credentials/tokens for business-service testing.

8. Failure mode: Authorization headers retained

Enabling requestHeaders/samplerData or logging request objects can put bearer tokens/cookies into JTL/jmeter.log. Keep those fields disabled for load and use token fingerprints plus redacted header markers.

9. Failure mode: ignoring expiry

Long tests may start valid and then accumulate 401s when tokens expire. Configured threads remain constant while achieved valid business load collapses. Add production-like refresh or constrain the run to the intended token-valid window.

10. Failure mode: unbounded refresh loop

If Refresh fails and immediately retries forever, the test hammers identity infrastructure and never resumes business work. Model at most the intended bounded refresh attempt; then mark/stop that virtual user if recovery fails.

11. Failure mode: XPath2 assertion scoped to JSON samples

A Thread Group-level SOAP XPath2 assertion applies to Login/Profile JSON too and fails because they are not XML. Attach XML/XPath2 checks to SOAP samplers or XML-only controller scope.

12. SOAP Fault versus transport status

SOAP Fault is application/protocol semantics inside XML. Some services use HTTP 500; others may return Faults with different status behavior. Check both HTTP status and SOAP Body/Fault/business nodes.

13. Causal performance separation

Symptom Auth/test cause Target cause to distinguish Evidence
Business RPS drops login/refresh in hot loop protected service slower sampler counts + IdP/target timing.
401s across users shared/wrong/expired token/cookie real auth outage/rate limit session/user/fingerprint map + reason.
Generator CPU rises XML/XPath/debug logging SOAP service slowdown generator CPU/GC + target service time.
TLS errors trust/cert/protocol bad credentials handshake exception before auth response.
CI-only leak save/debug settings changed service regression JTL schema + artifact scan.

14. Shortcuts to reject

  • Do not embed real credentials in JMX, CLI, or repository CSV.
  • Do not turn one user's token into a global property.
  • Do not disable TLS verification or weaken JVM certificate algorithms.
  • Do not blanket-retry login/refresh or add arbitrary long sleeps.
  • Do not increase thread count while session ownership/expiry is unresolved.
  • Do not enable broad sensitive result retention without explicit need.
  • Do not delete first-failure JTL/jmeter.log/redacted target evidence.

Knowledge check

Why can one global bearer token cause invalid_session?

Why is a TLS handshake failure not fixed by changing the password?

How do you detect accidental login-per-request?

Why should refresh attempts be bounded?

What evidence identifies a token without revealing it?

Next lesson

Checkpoint: two isolated users, one expiry each, zero leaks

Lesson 5 runs the full concurrent auth/SOAP flow and verifies both session isolation and evidence hygiene.

Official references and version notes

  • Component Reference — HTTP Request, HTTP Cookie Manager, HTTP Authorization Manager, Header Manager, JSON JMESPath Extractor/Assertion, XML Assertion, XPath2 Extractor/Assertion, and result-scope semantics.
  • Elements of a Test Plan — execution/scope and thread-local variable behavior.
  • Getting Started — Java requirements, TLS/runtime basics, and GUI-versus-CLI guidance.
  • Properties Reference — CSV result defaults, request/response header/body retention, TLS defaults, and HTTP client settings.
  • Generating Dashboard Report — required result fields and dashboard interpretation.
  • Best Practices — non-GUI load execution, listener restraint, and injector validity.
  • Apache JMeter downloads — current stable release and Java requirement.
Version and compatibility note

Version-sensitive statements were rechecked against current Apache JMeter primary documentation on 2026-09-05. The course baseline remains Apache JMeter 5.6.3 with a Java 17 JDK for labs and no third-party plugins; JMeter 5.6.3 requires Java 8+. HTTP Cookie Manager keeps a separate server-cookie storage area for each JMeter thread. HTTP Authorization Manager is intended for server authentication such as Basic/Digest/Kerberos challenge workflows; it is not the same thing as an application JSON login that issues bearer/refresh tokens. Passwords entered directly into Authorization Manager are stored unencrypted in the test plan, so this chapter uses synthetic CSV credentials and never embeds real secrets in JMX. XML Assertion checks only that response data is a formally correct XML document. Namespace-aware business checks use XPath2 Assertion/Extractor. The default HTTP sampler is HttpClient4, and JMeter's HTTPS protocol default is TLS; do not weaken JVM certificate algorithm constraints or trust verification to make an authorized environment pass. CSV result defaults keep sampler data, request headers, response headers, and response bodies out of the retained result file, while assertion failure messages remain enabled.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.