The spec states as a design goal:
[ARAP] evaluation_id-only binding path contradicts stateless PDP design goal "Preserve the AuthZEN Authorization API's stateless evaluation
model: the PDP retains no decision state between the denial and
the re-evaluation, and the durable request and approval state
lives in the Access Request Service role."
But the Access Request Service processing rules say:
"the service MUST resolve or validate denial.evaluation_id,
retrieve the Subject, Resource, Action, authorization-relevant
Context, and expires_at the PDP recorded for that
evaluation"
For the ARS to retrieve what the PDP recorded, that data has to
be stored somewhere. A stateless PDP stores nothing. An
independent ARS has no access to it and there is no defined API
to fetch it.
This came up in a WG call (Omri flagged it) but there is no
issue tracking it yet.
The binding_token path does not have this problem. The PDP
signs and forgets. The ARS verifies the signature. No stored
state needed. But binding_token is OPTIONAL, and the spec
treats the evaluation_id-only path as equally valid. That only
works when the PDP and ARS share state, which is not the
independent ARS topology the spec is trying to enable.
Options
Option A: Require binding_token when the ARS is
independent of the PDP. The evaluation_id-only path becomes
limited to same-service or shared-state deployments. No protocol
changes needed, just a clarification of when each path applies.
Option B: Define a mechanism for the PDP to push evaluation
records to the ARS at denial time. This preserves the
evaluation_id-only path for independent deployments but adds
a new API surface.
Option C: Drop the stateless design goal as it applies to
the evaluation_id path and explicitly document the state
requirements. Honest but weakens the spec's alignment with
base AuthZEN.
Option A seems like the right call. The binding_token path
already solves the stateless case cleanly.
The spec states as a design goal:
[ARAP] evaluation_id-only binding path contradicts stateless PDP design goal "Preserve the AuthZEN Authorization API's stateless evaluation
But the Access Request Service processing rules say:
For the ARS to retrieve what the PDP recorded, that data has to
be stored somewhere. A stateless PDP stores nothing. An
independent ARS has no access to it and there is no defined API
to fetch it.
This came up in a WG call (Omri flagged it) but there is no
issue tracking it yet.
The
binding_tokenpath does not have this problem. The PDPsigns and forgets. The ARS verifies the signature. No stored
state needed. But
binding_tokenis OPTIONAL, and the spectreats the
evaluation_id-only path as equally valid. That onlyworks when the PDP and ARS share state, which is not the
independent ARS topology the spec is trying to enable.
Options
Option A: Require
binding_tokenwhen the ARS isindependent of the PDP. The
evaluation_id-only path becomeslimited to same-service or shared-state deployments. No protocol
changes needed, just a clarification of when each path applies.
Option B: Define a mechanism for the PDP to push evaluation
records to the ARS at denial time. This preserves the
evaluation_id-only path for independent deployments but addsa new API surface.
Option C: Drop the stateless design goal as it applies to
the
evaluation_idpath and explicitly document the staterequirements. Honest but weakens the spec's alignment with
base AuthZEN.
Option A seems like the right call. The
binding_tokenpathalready solves the stateless case cleanly.