Skip to content

ARAP: the inline denial-binding form and the PEP's echo #660

Description

@mcguinness

Problem

The inline denial-binding form is never specified. A self-contained binding_token must carry the denied Subject, Resource, Action, and authorization-relevant Context "inline or as a binding_hash", and the inline form is RECOMMENDED for interoperability because it is compared structurally and needs no agreed byte canonicalization. binding_hash, binding_context_members, and denial_expires_at are named. The inline claims are not. The hashed form is fully specified, so two independent implementations can interoperate today by using it; what is blocked is the portable use of the form the text recommends.

The claim list's stated force does not match the verification procedure. The list is introduced by "SHOULD include the following claims", yet aud inside it is REQUIRED and carries a verifier-side MUST-reject, the verification steps require the expiry, and both key selection and issuer trust depend on iss, which carries no keyword at all. The interoperable JWT contract is stricter than its own introduction says.

The PEP's echo does not compose with the service's requirement. denial.binding_token is REQUIRED when denial.evaluation_id is absent and OPTIONAL otherwise. A PEP holding both may therefore omit the token and remain conformant, while an Independent Access Request Service requires it and rejects the submission. Two conformant implementations fail to interoperate.

Recommendation

Name the inline binding claims, so the recommended form is usable across implementations.

Define a normative JWT subset and keep the general statement that binding_token is opaque and format-flexible:

  • REQUIRED: iss, aud, exp, the binding representation (inline claims or binding_hash), and binding_context_members when Context participates in the binding.
  • RECOMMENDED: iat, jti.
  • OPTIONAL: evaluation_id, and deployment-specific claims.

Make the PEP's echo unconditional: the PEP echoes every denial member the PDP supplied, unchanged. This changes the force of an existing rule, which is why it is a working-group decision rather than an editorial correction.

Related

Once the claims are named, the illustrative tokens need correcting. Every binding_token in the base draft and its companions decodes to correlation data alone, with no aud, whose absence a conformant service must reject, and no binding_context_members. The base draft's token carries an evaluation_id only, which the text says does not satisfy the independent-service requirement it is meant to illustrate. That is an editor task, not a decision for this issue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions