docs(examples): add Kerberos / NTLM (Integrated Windows Auth) example#1139
Merged
Conversation
Adds a runnable example showing how to monitor sites protected by Negotiate (SPNEGO/Kerberos) or NTLM from a browser monitor on a Private Location. The Synthetics runner already forwards playwrightOptions.args verbatim into chromium.launch, so Chromium's built-in Integrated Windows Auth works by just setting --auth-server-allowlist and --auth-negotiate-delegate-allowlist. No src/ changes; this example documents the pattern, covers the host prerequisites (keytab, kinit'd ticket cache, krb5.conf, SPN, allowlist semantics) and the Private-Location-only limitation, and calls out that lightweight HTTP monitors are not supported today. Made-with: Cursor
emilioalvap
approved these changes
May 28, 2026
Contributor
emilioalvap
left a comment
There was a problem hiding this comment.
LGTM, tested support locally and the example seems sufficiently documented
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
examples/kerberos-auth/, a runnable example that shows how to monitor a site protected by Negotiate (SPNEGO/Kerberos) or NTLM using an Elastic Synthetics browser monitor on a Private Location.Elastic Synthetics drives Chromium through Playwright, and Chromium already has first-class support for Integrated Windows Authentication. The example simply forwards the two relevant Chromium command-line flags through
playwrightOptions.args, which the runner already spreads verbatim intochromium.launch({ args })insrc/core/gatherer.ts:No code changes in
src/are required — this PR documents and demonstrates the pattern.What's in the example
README.mdkinit/krb5.conf/ SPN / allowlist semantics), how to run, how to verify the flags reach Chromium, a troubleshooting matrix, and the known limitation that lightweight HTTP monitors are unsupported.synthetics.config.tsprotected-site.journey.tspackage.jsonnpm install && npm test.Why browser monitors only
Authorization: Negotiate/Authorization: NTLMtoken once the host is on the allowlist and a ticket is available.Validation
Flag propagation verified end-to-end on macOS against a mock HTTP server that always replies with
WWW-Authenticate: Negotiate, NTLM:ps auxwwwhile the browser was up; the mainheadless_shellcommand line contained:Authorizationheader sent) — matching documented Chromium behaviour.An end-to-end successful handshake was not run in CI because that requires a real KDC / keytab / ticket cache; the example is structured so a customer with a properly-configured Private Location host can validate layer by layer (see the README's Verifying the flags are applied and Troubleshooting sections).
Customer validation checklist
ps -ef | grep -- '--auth-server-allowlist'on the Private Location agent host while a journey is running.sudo -u <agent-user> klistshows a valid TGT; keytab-based renewal is scheduled (cron / systemd timer /kinit -R).expect(status).toBeLessThan(400)passes against the real internal URL.Test plan
examples/kerberos-auth/parses with the current runner.401when no credentials are available (correct behaviour).ps).Notes / out of scope
src/, no new dependencies, no behaviour change for existing users.Made with Cursor