Support for Indeterminate Decision / Evaluation Status in Authorization Responses
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 160
- Forks
- 41
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 23
Description
AuthZEN responses currently require a boolean decision (allow / deny), with optional context for additional information.
In practice, there are cases where the PDP cannot complete evaluation, for example:
- attribute source unavailable
- external risk signal unavailable
- missing required context
Today, these are typically represented as:
{
"decision": false,
"context": {
"error": "risk_engine_unavailable"
}
}
This makes it difficult to distinguish between:
-
Deny → policy evaluated and access is not allowed
-
Evaluation failure → system could not determine the correct outcome
Both appear as deny at the decision level.
Why This Matters
- Enforcement Semantics
Policy Enforcement Points (PEPs) may need to react differently:
-
Deny → block request
-
Indeterminate → retry, fallback, step-up auth, or degrade access
Without a standard signal, each PEP must interpret context independently.
- Interoperability
The specification currently allows context to carry arbitrary information, but:
Its semantics are implementation-specific
- PEP behavior is not standardized
- Cross-vendor interoperability is limited
- Audit and Explainability
From a governance and audit perspective, it is important to distinguish:
-
“Access denied due to policy”
-
“Access denied due to system failure or missing data”
Collapsing both into deny reduces audit clarity and can lead to misleading conclusions.
- Alignment with Existing Models
Other authorization systems explicitly model evaluation uncertainty:
XACML: Permit / Deny / Indeterminate / NotApplicable
Many policy engines (e.g., OPA) distinguish between decision and evaluation failure
AuthZEN currently lacks an equivalent concept.
Current Workaround
Use of context:
{
"decision": false,
"context": {
"error": "PIP_UNAVAILABLE",
"retryable": true
}
}
This enables:
- retry logic
- fallback behavior
However:
- No standard meaning of fields like error or retryable
- No guarantee that PEP understands or honors them
- Still represented as deny at decision level
Proposal (Exploratory)
Introduce a distinction between:
Decision outcome
Evaluation status
Option A: Add status field
{
"decision": false,
"status": "indeterminate",
"context": {
"error": "PIP_UNAVAILABLE",
"retryable": true
}
}
Where:
- decision remains backward compatible
- status conveys evaluation reliability
Option B: Extend decision vocabulary
{
"decision": "indeterminate",
"context": {
"error": "PIP_UNAVAILABLE"
}
}
This is more expressive but may impact backward compatibility.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No files, tests, or entry points are identified. First clarify whether the intended direction is a status field or an extended decision vocabulary, then establish the interoperability and backward-compatibility requirements; done means the specification change and its semantics are agreed.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, authorization, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100