You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fa0265f
Browse filesBrowse the repository at this point in the historyBrowse files
authored
Add v2 blob payload tokens and explicit read scopes (#310)
* Align direct blob downloads with payload token grammar
Require the complete v1 payload token format for direct downloads, matching automatic resolution. Add offline destination checks and document token and storage-location compatibility.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Preserve changelog line endings
Keep the existing changelog formatting while adding the payload token compatibility note.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add v2 blob payload tokens with v1 read compatibility
Write self-describing blob URLs by default and read both token formats from the configured storage endpoint and container. Account for URL token length in worker action-size estimates and document reader upgrades and storage migration.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add explicit Azure Blob payload read scopes
Support independent primary-account container access and listed account endpoints while retaining configured-container reads by default. Preserve named v1/v2 references and legacy v2 URL suffix handling.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Return immutable snapshots of additional payload account URIs
Keep getter results independent from the stored endpoint list and verify returned snapshots remain immutable after subsequent option updates.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Bernd Verst <beverst@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,8 @@
1
1
## Unreleased
2
2
3
+
* Write self-describing v2 blob payload tokens by default while retaining v1 and v2 reads from the configured storage endpoint and container. Require complete token formats for direct downloads and account for URL token length in worker action-size estimates. Upgrade readers before deploying v2 writers; changing storage locations requires explicit migration or a store configured for the original location.
4
+
* Add explicit primary-account-wide and additional-account read scopes for Azure Blob payloads while retaining configured-container access by default. Additional accounts require identity authentication and exact HTTPS account service endpoints. Preserve named and nested v1/v2 references and ignore legacy v2 URL query and fragment suffixes.
Copy file name to clipboardExpand all lines: azure-blob-payloads/README.md
+109Lines changed: 109 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -52,6 +52,111 @@ LargePayloadStorageOptions payloadOptions = new LargePayloadStorageOptions()
52
52
53
53
The storage identity needs permission to create the container and read and write blobs. Payload blobs are retained after orchestration processing, so configure an Azure Storage lifecycle policy appropriate for the application's retention requirements.
54
54
55
+
## Payload references and storage location
56
+
57
+
The built-in store now writes self-describing `blob:v2:<absolute-blob-URL>` tokens, matching the .NET token
58
+
format. It reads both v2 tokens and legacy `blob:v1:<container>:<blob-name>` tokens, including named and nested
59
+
blobs. New blob names remain 32 lowercase hexadecimal characters. New v2 URLs retain the blob's location but
60
+
never include user information, query parameters, fragments, or credentials. Upgrade all readers before
61
+
deploying writers that emit v2 tokens.
62
+
63
+
Both formats default to the configured storage endpoint **and container**. A reference to another container in
64
+
the same account or to another account is rejected, even when the configured identity has Storage permissions
65
+
there. Recognizing a self-describing URL does not authorize its destination. Direct downloads and automatic
66
+
resolution use the same token parsing and destination policy; blob-name shape does not authorize access.
67
+
Token-formatted strings are treated as references even when their blob names are not generated UUIDs.
68
+
69
+
### Explicit read scopes
70
+
71
+
Configure read scopes on `LargePayloadStorageOptions` before constructing the store:
72
+
73
+
| Configuration | Permitted reads |
74
+
|---|---|
75
+
| Default: `allowAllContainersInConfiguredAccount = false`, no additional account URIs | Configured account endpoint and configured container only |
76
+
|`setAllowAllContainersInConfiguredAccount(true)`| All containers at the configured account endpoint |
77
+
|`setAdditionalAccountUris(...)`| All containers at each explicitly listed additional account endpoint |
78
+
79
+
These settings are independent. Listing additional accounts does not widen primary-account container access.
80
+
To allow every container across the primary and additional accounts, enable the boolean and list those accounts.
81
+
Listing the primary endpoint is rejected during construction; use `setAllowAllContainersInConfiguredAccount(true)`
82
+
to widen its container scope. Equivalent additional endpoints are deduplicated. Uploads and upload
83
+
verification always use the configured container, regardless of read scope.
84
+
85
+
For primary-account-wide reads using the existing authentication mode:
0 commit comments