Skip to content

Authenticate A2A requests and fix jwt-validation pipeline reload#46

Open
yoavkatz wants to merge 1 commit into
rossoctl:mainfrom
yoavkatz:fix/a2a-auth-and-jwt-validation-config
Open

Authenticate A2A requests and fix jwt-validation pipeline reload#46
yoavkatz wants to merge 1 commit into
rossoctl:mainfrom
yoavkatz:fix/a2a-auth-and-jwt-validation-config

Conversation

@yoavkatz

Copy link
Copy Markdown
Contributor

Summary

Wire a Keycloak bearer token through the A2A evaluation path so requests are accepted by the agent's authbridge sidecar, and fix the pipeline merge so jwt-validation reloads instead of failing with issuer is required.

Changes

  • a2a_client.py — attach Authorization: Bearer from config.auth_token (A2A_AUTH_TOKEN) to the agent-card fetch and every send_message.
  • evaluate-benchmark.sh — obtain a rossoctl-realm token via the direct-access-grant flow when A2A_AUTH_TOKEN is unset (mirrors the deploy flow).
  • pipeline-merge.py — seed each plugin entry from the operator's rendered config block (deep-merging fragment + overrides on top) instead of replacing the plugin list wholesale, preserving operator-only config such as jwt-validation's issuer and token-exchange's token_url.
  • plugins/jwt-validation.yaml — render issuer/keycloak_url/keycloak_realm from the operator authbridge-config ConfigMap; document the DisallowUnknownFields schema constraint.
  • apply-pipeline.sh — source JWT_VALIDATION_* from the base ConfigMap and pre-flight fail if the issuer can't be resolved while jwt-validation is active.
  • deploy-agent.sh — fail fast with a clear message when python3/PyYAML is missing and a plugin selector was supplied.
  • run-ibac-comparison.sh — new wrapper to run a benchmark with a plugin preset vs a baseline and compare.

Test plan

  • Deploy an agent with a plugin preset and confirm the authbridge sidecar reloads without issuer is required.
  • Run evaluate-benchmark.sh and confirm A2A requests are authenticated (no HTTP 401).
  • Run run-ibac-comparison.sh end-to-end.

🤖 Generated with Claude Code

Wire a Keycloak bearer token through the A2A evaluation path so requests
are accepted by the agent's authbridge sidecar, and fix the pipeline
merge so jwt-validation reloads instead of failing with "issuer is
required".

- a2a_client: attach Authorization: Bearer from config.auth_token
  (A2A_AUTH_TOKEN) to the agent-card fetch and every send_message.
- evaluate-benchmark.sh: obtain a rossoctl-realm token via the
  direct-access-grant flow when A2A_AUTH_TOKEN is unset.
- pipeline-merge.py: seed each plugin entry from the operator's rendered
  config block (deep-merge fragment + overrides on top) instead of
  replacing the plugin list wholesale, preserving operator-only config
  such as jwt-validation's issuer and token-exchange's token_url.
- jwt-validation.yaml: render issuer/keycloak_url/keycloak_realm from the
  operator authbridge-config ConfigMap; document the DisallowUnknownFields
  schema constraint.
- apply-pipeline.sh: source JWT_VALIDATION_* from the base ConfigMap and
  pre-flight fail if the issuer can't be resolved while jwt-validation is
  active.
- deploy-agent.sh: fail fast with a clear message when python3/PyYAML is
  missing and a plugin selector was supplied.
- run-ibac-comparison.sh: new wrapper to run a benchmark with a plugin
  preset vs a baseline and compare.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Yoav Katz <katz@il.ibm.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant