Repository navigation
ARAP: record whether an approval depends on continuing approver authority (#746) - #757
Draft
mcguinness wants to merge 1 commit into
Draft
mcguinness wants to merge 1 commit into
mcguinness wants to merge 1 commit into
Conversation
Approver eligibility is checked once, before `approved` is returned. The status check at re-evaluation covers the approval's own state. Nothing re-examines the authority that produced it, so an approval can stay valid, unrevoked and in scope after a delegation lapses. Whether that is a defect depends on what the approval is, and this profile models neither kind, so it cannot state a rule: re-checking the approver is wrong for an attestation, and silence is wrong for a derivative grant. The field records the distinction without choosing, without defining revocation, and without obliging a PDP to reach anything it cannot reach.
mcguinness
force-pushed
the
arap-746-approver-authority
branch
from
October 18, 2026 05:19
230d02e to
6236887
Compare
This branch has not been deployed
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.
Proposes the minimal answer in #746. Draft, and it answers a scope question the issue raises first — see below.
Off
main. Merges clean with #744.The gap
Approver eligibility, including delegated approver authority, is evaluated once, before
approvedis returned. Current Approval Status requires the PDP to check the approval's own state at re-evaluation: revoked, cancelled, superseded, invalidated. Nothing re-examines the authority that produced the approval.A manager approves a standing grant with a thirty-day
approved_until. The next day their delegated authority lapses. The approval record is untouched, so it is not revoked, cancelled, superseded or expired. Every later re-evaluation performs the required status check, finds the approval clean, and permits — for twenty-nine days, with every rule in this profile satisfied.What changes
One addition to what the approval record must let the PDP determine: whether the approval's validity depends on the approver's authority remaining current. The two cases are named
point_in_time, where the approval records what an authorized approver confirmed when they confirmed it and stands afterwards, andcontinuing, where its validity depends on that authority remaining current.Worth being precise about what that obliges. The existing sentence says the record must "contain, or allow the PDP to determine" its contents, so this adds a distinction the PDP must be able to resolve, not a stored field with a required name. The names are there so that two implementations that do represent it agree on what the values mean.
That is the whole mechanism. It defines no revocation, requires the PDP to reach nothing new, and makes no check mandatory. @Projetxana's qualification on #663 is what forces this shape: withdrawal of authority should invalidate an approval only where the applicable semantics require that authority to remain current. Re-checking the approver is wrong for an attestation; silence is wrong for a derivative grant. The profile models neither, so it records the distinction instead of choosing.
A value rather than a boolean, because the distinction is a kind and two values that each say what they mean age better than
trueandfalse.What it is honest about
It applies to both verification paths, as the rest of the record does. A PDP resolving
approval.idfrom trusted state determines the value by lookup; a PDP verifying a self-containedapproval.statedetermines it from that payload. What this profile cannot supply for the second path is an interoperable representation, because it defines no approval-state payload at all (#659) — but nothing stops a deployment-specific signed payload from carrying it today, which is how every other piece of approval-state information already travels. So the semantic requirement covers both and the by-value representation stays deployment-specific. This is the same shape as #659 one level up, which the issue notes: a signed artifact proves what was true at signing and cannot prove nothing has changed since.It does not make anything happen. A deployment that marks approvals
continuingand never checks is exactly where it was. The value identifies the approvals for which an audit needs evidence of continuing authority. It does not provide that evidence, and nothing here requires the authority to have been checked.The decision this takes
The issue's first recommendation is to decide whether this profile owns the problem at all, and notes it is arguably identity-lifecycle territory. This PR answers yes, for the recording only. Deciding scope by merging a field is backwards, so the alternative is on the table: close #746 as out of scope and let a deployment profile carry it.
My argument for recording it here is that Approver Eligibility already names "delegated approver authority", so this profile has already acknowledged the second kind of approval exists. It just never says what happens when the delegation lapses.
Explicitly not here, and rejected in the issue: requiring the PDP to re-validate approver authority, defining an authority status or revocation protocol, and defining transitive path resolution.
Costs
No BCP 14 keywords added or removed, 315 either side. The distinction joins the existing MUST list for the approval record, so it is required of every conforming Access Request Service, which is a real conformance change for a one-value gain. Making it optional instead would mean an auditor cannot rely on it, which is most of the value.
Checks
kramdown-rfc2629 and
xml2rfc --textbuild clean.normative_diff.pyagainstmainshows the record-contents MUST reworded with its replacement and nothing removed.{{?RFC9396}}is the only unresolved reference and is pre-existing.