Ingress Execution Authority
Ingresses make two independent authorization decisions:
- Call authorization decides whether a caller may reach an ingress through its transport.
- Execution authority decides which permissions the target Reactor component receives after the call is admitted.
For example, ingresses/orders/create:http controls who may call an HTTP ingress. Its execution configuration controls whether the component runs with the ingress ACL, the caller ACL, or an intersection of both.
Canonical configuration
Every ingress has an execution model. Use the execution object in app manifests, CLI resource manifests, and ingress API writes:
execution:
authority: acl | caller | restricted-caller
acl: []| Authority | Effective component authority | ACL rule |
|---|---|---|
acl | Exactly the ingress ACL | Optional. An omitted ACL is empty. This is the default. |
caller | Exactly the caller's effective authority | Must be absent. |
restricted-caller | Caller authority intersected with ingress ACL | Required and non-empty. |
acl
acl replaces the caller's authority with the ingress ACL. It is the default for every ingress type and is the most restrictive model: a caller can invoke the ingress without automatically giving its own permissions to the component.
execution:
authority: acl
acl:
- graph/order:query
- graph/order:field:orderTotalChoose this mode for fixed-purpose integrations and components that should receive only the permissions explicitly declared by the ingress.
caller
caller preserves the caller's effective authority. It is appropriate only when the component should act entirely within the invoking user's scope.
execution:
authority: callerAn ACL is not allowed with caller, because it would not affect the component's authority.
restricted-caller
restricted-caller runs with the intersection of the caller ACL and ingress ACL. Every permission must be granted by both sides.
execution:
authority: restricted-caller
acl:
- graph/order:query
- graph/order:field:createdAt
- graph/order:field:orderTotalChoose this mode when a component must remain user-scoped while enforcing an additional data-access ceiling, such as a restricted set of Graph fields. The caller identity, tenant context, and access attributes remain available.
API behavior
Every ingress API read returns the canonical object:
{
"execution": {
"authority": "acl",
"acl": ["graph/order:query"]
}
}Ingress writes accept either the canonical execution object or the legacy root-level acl shorthand, but not both. An ingress with neither form defaults to authority: acl and an empty ACL.
Transport support
| Transport | acl | caller | restricted-caller |
|---|---|---|---|
| Authenticated HTTP | Yes | Yes | Yes |
| Public HTTP | Yes | No | No |
| Queue | Yes | No | No |
| Stream | Yes | No | No |
| MCP | Yes | Yes | Yes |
Public HTTP, queue, and stream ingress invocations do not have an authenticated caller authority that can safely be preserved or intersected. They must use acl.
Related
- Ingresses — shared ingress concepts and transport selection.
- HTTP ingresses — authenticated and public HTTP behavior.
- MCP ingresses — typed MCP tools and caller-scoped access.