Skip to content

Commit ceab0be

Browse files
committed
Document payload reference trust and invocation boundaries
1 parent eaaff4a commit ceab0be

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

‎azure-functions-durable/README.md‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ pool. Both honor `PYTHON_THREADPOOL_THREAD_COUNT`.
112112
Activities retain their synchronous or asynchronous calling convention.
113113
Synchronous activities use synchronous storage inside the host-managed execution
114114
thread and remain directly callable without `await`; async activities await
115-
async storage. Binding converters perform no storage I/O. Synchronous functions
115+
async storage. Direct calls to decorated activities return ordinary Python values
116+
without accessing payload storage; transport processing applies only to host
117+
binding invocations. Binding converters perform no storage I/O. Synchronous functions
116118
still receive the synchronous durable client, and synchronous client APIs use
117119
synchronous storage. Direct `Orchestrator.handle()` and `Orchestrator.create()`
118120
adapters also remain synchronous.
@@ -121,6 +123,8 @@ Both client history APIs hydrate entity operation inputs and results, including
121123
values nested in the host's entity protocol envelopes. During orchestration
122124
replay, nested entity results are hydrated, but historical nested request inputs
123125
are not downloaded because replay only needs their correlation metadata.
126+
Historical scheduled activity inputs are also not downloaded during replay;
127+
explicit history retrieval continues to hydrate those inputs.
124128

125129
> [!WARNING]
126130
> With payload storage configured, whole payload strings recognized by the
@@ -140,6 +144,17 @@ itself externalized. Keep the wrapper whenever passing that value across a
140144
durable payload boundary; passing its string field alone opts back into reference
141145
interpretation. Custom payload stores define their own reserved token syntax.
142146

147+
> [!WARNING]
148+
> Recognized references are trusted transport inputs, not authorization
149+
> boundaries. `BlobPayloadStore` reads from the container named in the token
150+
> using its configured credentials; `container_name` selects the upload
151+
> container and does not restrict downloads. An account-wide connection string
152+
> can therefore allow reads outside that container. Use least-privilege
153+
> credentials scoped to the intended payload storage, and explicitly decide
154+
> whether external callers may supply references. Reject untrusted references
155+
> or validate their allowed storage locations before passing them into durable
156+
> APIs; token recognition alone does not authorize a read.
157+
143158
## Unit testing entities
144159

145160
Use `execute_entity()` to run one entity operation in-process without a

0 commit comments

Comments
 (0)