Sandor Molnar created KNOX-3465:
-----------------------------------

             Summary: Add Docker-based E2E CI tests for RFC 8693 token exchange 
— same-subject success and delegation gating (KNOX-3455 Bucket 1)
                 Key: KNOX-3465
                 URL: https://issues.apache.org/jira/browse/KNOX-3465
             Project: Apache Knox
          Issue Type: Sub-task
          Components: CI, Tests
    Affects Versions: 3.1.0
            Reporter: Sandor Molnar
            Assignee: Sandor Molnar
             Fix For: 3.1.0


h2. Summary

Add Docker-based E2E CI coverage proving RFC 8693 token exchange works 
end-to-end
through a running Knox gateway, for the subset of KNOX-3455 acceptance criteria 
that
is already backed by product code on {{{}master{}}}.

This is a scoped slice of the KNOX-3455 acceptance-criteria list (the master 
list
lives on KNOX-3455). It deliberately excludes:
 * the same-subject requested-audience authorization ACs, which depend on the 
unmerged
KNOX-3461 — tracked separately.
 * the requested-scope ACs, for which no product behavior exists yet (scope is 
not
parsed, minted, or validated on the exchange path after the
{{delegation.requested.scope.enabled}} flag was removed in KNOX-3457) — tracked
separately, blocked until requesting scope becomes live.

h2. Approach

Reuse the same Docker-based E2E test framework introduced in KNOX-3449 (PR 
#1396),
running as part of the regular/default CI build — {*}no separate docker 
compose{*}. New
topology files are added to the CI {{Dockerfile 
}}({{{}.github/workflows/build/Dockerfile{}}}) and auto-discovered 
{{test_*.py}} scripts
exercise them against the running gateway.
h2. Acceptance criteria (Bucket 1 — testable on {{master}} today)
 # Same-subject exchange returns the correct {{{}sub{}}}, {{{}aud{}}}, 
{{{}iss{}}}, and
{{issued_token_type}} in the minted token.
 ** NOTE: {{scope}} is intentionally excluded — no minted Knox token carries a
{{scope}} claim.
 # Permutations of {{no-act}} / {{act}} claim on the subject token all succeed.
 ** NOTE: the "requested scopes" permutation axis from the KNOX-3455 master 
list is
excluded here — scope does not affect the exchange outcome.
 # A delegation exchange with a missing {{audience}} returns HTTP 400 with error
{{invalid_request}} (delegation-enabled topology, audience-required enforcement 
on).
 # A delegation exchange with more than one {{audience}} returns HTTP 400 with 
error
{{invalid_request}} (delegation-enabled topology, max-one enforcement on).
 # A cross-subject exchange against a delegation-{*}disabled{*} topology is 
rejected with
HTTP 400, error {{{}invalid_request{}}}, message
{{{}"Delegation is not enabled for this topology"{}}}.
 # A same-subject exchange against a delegation-{*}enabled{*} topology succeeds
(zero-config H2 delegation policy service; no policy seeding required).

h2. Topologies to add
 * A same-subject / delegation-disabled topology (plain KNOXIDF token exchange) 
used
for ACs 1, 2, and 5.
 * A delegation-enabled topology with {{{}delegation.server.enabled=true{}}},
{{{}delegation.requested.subject.enabled=true{}}},
{{{}delegation.enforce.requested.audience.required=true{}}}, and
{{{}delegation.enforce.requested.audience.max.one=true{}}}, used for ACs 3, 4, 
and 6.

Each new topology file must be wired into 
{{.github/workflows/build/Dockerfile}} with
its own {{ADD}} line, alongside the existing topologies.
h2. Out of scope (tracked separately)
 * Requested-audience-vs-subject-{{{}aud{}}} authorization (blocked on 
KNOX-3461):
requested audience must be a subset of the subject token's {{{}aud{}}}, else 
HTTP 400
{{{}invalid_target{}}}. NOTE: the KNOX-3455 master list phrases these as "full 
token
prefix" / {{{}invalid_scope{}}}; the shipped design is exact set-containment 
returning
{{{}invalid_target{}}}.
 * Requested-scope ACs (blocked until requesting scope becomes live): 
"requested scope
not in subject token's scopes → {{{}invalid_scope{}}}", plus the {{scope}} 
claim in the
issued token.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to