@wildo-ai/saas-technical-doc 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/build/csp-emit.d.ts.map +1 -1
- package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +37 -0
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js +46 -5
- package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-documentation-chapters.d.ts +101 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.js +205 -0
- package/dist/esm/companion/application-documentation/application-documentation-chapters.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-domain-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js +3 -0
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.d.ts +34 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.js +45 -0
- package/dist/esm/companion/application-documentation/docs-api-origin-substitution.js.map +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +24 -10
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +25 -15
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +11 -3
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +9 -2
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +10 -4
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
- package/dist/esm/companion/index.d.ts +2 -0
- package/dist/esm/companion/index.d.ts.map +1 -1
- package/dist/esm/companion/index.js +2 -0
- package/dist/esm/companion/index.js.map +1 -1
- package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -1
- package/dist/esm/companion/manual-controller-route-projection.js.map +1 -1
- package/dist/esm/companion/openapi-example-derivation.d.ts +53 -0
- package/dist/esm/companion/openapi-example-derivation.d.ts.map +1 -0
- package/dist/esm/companion/openapi-example-derivation.js +229 -0
- package/dist/esm/companion/openapi-example-derivation.js.map +1 -0
- package/dist/esm/companion/openapi-generator.d.ts +8 -4
- package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
- package/dist/esm/companion/openapi-generator.js +323 -33
- package/dist/esm/companion/openapi-generator.js.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts +57 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.js +29 -0
- package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
- package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
- package/dist/esm/companion/publish-result.types.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +8 -0
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +20 -0
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts +2 -0
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js +48 -31
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.js +26 -10
- package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -1
- package/dist/esm/companion/spec-to-operation-doc.d.ts +52 -10
- package/dist/esm/companion/spec-to-operation-doc.d.ts.map +1 -1
- package/dist/esm/companion/spec-to-operation-doc.js +125 -7
- package/dist/esm/companion/spec-to-operation-doc.js.map +1 -1
- package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-definitions.js.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -1
- package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
- package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +27 -24
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js +205 -82
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
- package/dist/esm/content.exports.d.ts.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/openapi/api-reference-link-index.d.ts +3 -0
- package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
- package/dist/esm/openapi/api-reference-link-index.js +26 -15
- package/dist/esm/openapi/api-reference-link-index.js.map +1 -1
- package/dist/esm/openapi/api-reference-pages.d.ts +55 -0
- package/dist/esm/openapi/api-reference-pages.d.ts.map +1 -0
- package/dist/esm/openapi/api-reference-pages.js +229 -0
- package/dist/esm/openapi/api-reference-pages.js.map +1 -0
- package/dist/esm/openapi/api-reference-search.d.ts +53 -0
- package/dist/esm/openapi/api-reference-search.d.ts.map +1 -0
- package/dist/esm/openapi/api-reference-search.js +100 -0
- package/dist/esm/openapi/api-reference-search.js.map +1 -0
- package/dist/esm/openapi/api-reference-targets.d.ts +11 -0
- package/dist/esm/openapi/api-reference-targets.d.ts.map +1 -1
- package/dist/esm/openapi/api-reference-targets.js +8 -0
- package/dist/esm/openapi/api-reference-targets.js.map +1 -1
- package/dist/esm/openapi/index.d.ts +2 -0
- package/dist/esm/openapi/index.d.ts.map +1 -1
- package/dist/esm/openapi/index.js +2 -0
- package/dist/esm/openapi/index.js.map +1 -1
- package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
- package/dist/esm/openapi-reference-model.exports.d.ts +2 -0
- package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
- package/dist/esm/openapi-reference-model.exports.js +2 -0
- package/dist/esm/openapi-reference-model.exports.js.map +1 -1
- package/dist/esm/runtime/AuthExchangePage.d.ts +45 -4
- package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
- package/dist/esm/runtime/AuthExchangePage.js +45 -12
- package/dist/esm/runtime/AuthExchangePage.js.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts +2 -2
- package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.js +8 -4
- package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
- package/dist/esm/runtime/DocsFrontendProviders.d.ts +30 -0
- package/dist/esm/runtime/DocsFrontendProviders.d.ts.map +1 -0
- package/dist/esm/runtime/DocsFrontendProviders.js +39 -0
- package/dist/esm/runtime/DocsFrontendProviders.js.map +1 -0
- package/dist/esm/runtime/DocsProviderComponent.d.ts +41 -0
- package/dist/esm/runtime/DocsProviderComponent.d.ts.map +1 -0
- package/dist/esm/runtime/DocsProviderComponent.js +17 -0
- package/dist/esm/runtime/DocsProviderComponent.js.map +1 -0
- package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/documentation-site-translator.d.ts +53 -0
- package/dist/esm/runtime/documentation-site-translator.d.ts.map +1 -0
- package/dist/esm/runtime/documentation-site-translator.js +51 -0
- package/dist/esm/runtime/documentation-site-translator.js.map +1 -0
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +1 -2
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +8 -0
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +8 -0
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
- package/dist/esm/runtime/openapi-reference-model.d.ts +30 -0
- package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -1
- package/dist/esm/runtime/openapi-reference-model.js +85 -11
- package/dist/esm/runtime/openapi-reference-model.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-navigation.d.ts +50 -0
- package/dist/esm/runtime/openapi-reference-navigation.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-navigation.js +46 -0
- package/dist/esm/runtime/openapi-reference-navigation.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-samples.d.ts +40 -0
- package/dist/esm/runtime/openapi-reference-samples.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-samples.js +169 -0
- package/dist/esm/runtime/openapi-reference-samples.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-styles.d.ts +28 -0
- package/dist/esm/runtime/openapi-reference-styles.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-styles.js +292 -0
- package/dist/esm/runtime/openapi-reference-styles.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-view.d.ts +40 -5
- package/dist/esm/runtime/openapi-reference-view.d.ts.map +1 -1
- package/dist/esm/runtime/openapi-reference-view.js +828 -82
- package/dist/esm/runtime/openapi-reference-view.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-words-context.d.ts +12 -0
- package/dist/esm/runtime/openapi-reference-words-context.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-words-context.js +30 -0
- package/dist/esm/runtime/openapi-reference-words-context.js.map +1 -0
- package/dist/esm/runtime/openapi-reference-words.d.ts +205 -0
- package/dist/esm/runtime/openapi-reference-words.d.ts.map +1 -0
- package/dist/esm/runtime/openapi-reference-words.js +162 -0
- package/dist/esm/runtime/openapi-reference-words.js.map +1 -0
- package/dist/esm/runtime/provider-component-registry.techdoc.d.ts +31 -0
- package/dist/esm/runtime/provider-component-registry.techdoc.d.ts.map +1 -0
- package/dist/esm/runtime/provider-component-registry.techdoc.js +35 -0
- package/dist/esm/runtime/provider-component-registry.techdoc.js.map +1 -0
- package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts +1 -0
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js +10 -2
- package/dist/esm/runtime/use-docs-frontend-provider-registry.js.map +1 -1
- package/dist/esm/runtime/use-docs-provider-component.d.ts +29 -0
- package/dist/esm/runtime/use-docs-provider-component.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-provider-component.js +42 -0
- package/dist/esm/runtime/use-docs-provider-component.js.map +1 -0
- package/dist/esm/runtime/use-docs-provider-scripts.d.ts +37 -0
- package/dist/esm/runtime/use-docs-provider-scripts.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-provider-scripts.js +47 -0
- package/dist/esm/runtime/use-docs-provider-scripts.js.map +1 -0
- package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-provider-sdks.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-consumer-documentation-content.techdoc.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"application-consumer-documentation-content.techdoc.d.ts","sourceRoot":"","sources":["../../../../src/content/application-consumer-documentation-content.techdoc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,sDAAsD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoyQzD,CAAC"}
|
|
@@ -20,9 +20,12 @@
|
|
|
20
20
|
* fact in it is projected from sources the application already accepted — its own resource
|
|
21
21
|
* registry, its declared API-reference categories, and each specification's purpose and lifecycle.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* A page PER resource followed, as a generated tier with its own reserved namespace (see
|
|
24
|
+
* `pathForUnit`). And a cross-resource BUSINESS use case — the journey this module can never write,
|
|
25
|
+
* because it belongs to one application — is authored by that application as a documentation
|
|
26
|
+
* chapter its plan declares (#874, `application-documentation-chapters.ts`), again in a reserved
|
|
27
|
+
* namespace. A unit whose ref an application chose freely still fails closed rather than acquiring
|
|
28
|
+
* an implicit route.
|
|
26
29
|
*/
|
|
27
30
|
export const APPLICATION_CONSUMER_DOCUMENTATION_AUTHORED_CONTENT_V1 = [
|
|
28
31
|
{
|
|
@@ -737,11 +740,6 @@ administration surface permits that sequence. Do not mark it as default yet.
|
|
|
737
740
|
|
|
738
741
|
{{CONSUMER_FACT:source:consumer-fact:access-single-sign-on#connectionConfigurationMarkdown}}
|
|
739
742
|
|
|
740
|
-
> **Current limitation:** keep \`bypassAppMFA\` off. The configuration field is
|
|
741
|
-
> present, but the current authentication runtime does not use it to decide
|
|
742
|
-
> whether the application requests another factor. Prove the actual sign-in
|
|
743
|
-
> journey with a controlled account; do not use this field as audit evidence.
|
|
744
|
-
|
|
745
743
|
> **SSO role mapping is an access grant.** Test every mapped value, keep the
|
|
746
744
|
> fallback role non-administrative, and verify an expected refusal. A provider
|
|
747
745
|
> group name should never become broad application authority merely because it
|
|
@@ -974,7 +972,7 @@ that can reveal a mapping defect:
|
|
|
974
972
|
| Newly eligible person, when first-sign-in creation is enabled | The intended user and membership lifecycle occurs with the fallback role |
|
|
975
973
|
| Person with a mapped provider role or group | The exact external value maps to the intended application role |
|
|
976
974
|
| Person outside an allowed domain or mapping | The connection refuses the identity without revealing another account |
|
|
977
|
-
| Person with application MFA requirements | The actual post-provider journey is observed
|
|
975
|
+
| Person with application MFA requirements | The actual post-provider journey is observed. A connection cannot exempt anyone from the application's requirement: the declared policy is enforced on the federated lane too, and an organization may only tighten it |
|
|
978
976
|
| Independent recovery administrator | Provider outage or mapping failure does not remove all administrative access |
|
|
979
977
|
|
|
980
978
|
Use controlled test identities and non-sensitive application actions. Do not
|
|
@@ -1595,11 +1593,13 @@ not rotate secret material or repair an ownerless key.
|
|
|
1595
1593
|
|
|
1596
1594
|
## Close the change with evidence
|
|
1597
1595
|
|
|
1598
|
-
{{CONSUMER_FACT:source:consumer-fact:access-api-keys#
|
|
1596
|
+
{{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsMarkdown}}
|
|
1599
1597
|
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1598
|
+
After a rotation, the new key should show accepted requests and a recent
|
|
1599
|
+
last-accepted time, and the key it replaced should stop being accepted. The
|
|
1600
|
+
counters cover a rolling week, so a key a workload uses less often than weekly
|
|
1601
|
+
can show none: read its last-accepted time before calling it unused, and confirm
|
|
1602
|
+
with the owning workload before deleting a key that time does not settle.
|
|
1603
1603
|
|
|
1604
1604
|
Retain a non-secret lifecycle record containing:
|
|
1605
1605
|
|
|
@@ -1649,11 +1649,14 @@ flowchart TD
|
|
|
1649
1649
|
The non-secret prefix helps identify the credential record; it cannot prove
|
|
1650
1650
|
that the workload received the current complete secret.
|
|
1651
1651
|
|
|
1652
|
-
{{CONSUMER_FACT:source:consumer-fact:access-api-keys#
|
|
1652
|
+
{{CONSUMER_FACT:source:consumer-fact:access-api-keys#usageStatisticsMarkdown}}
|
|
1653
1653
|
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1654
|
+
Only requests the application ACCEPTED the key for are counted. A key sent with
|
|
1655
|
+
the wrong secret, past its expiry or after deactivation is refused and leaves no
|
|
1656
|
+
count, and neither does a request stopped before it reaches the application. So
|
|
1657
|
+
a key with no recent use points at the workload not sending it; failures on a
|
|
1658
|
+
key with recent use point at the request itself (its scope, roles or payload).
|
|
1659
|
+
Confirm either reading with one controlled request.
|
|
1657
1660
|
|
|
1658
1661
|
The request must carry the complete opaque value in this maintained header
|
|
1659
1662
|
shape:
|
|
@@ -2196,7 +2199,7 @@ The maintained registered-client lifecycle is:
|
|
|
2196
2199
|
|
|
2197
2200
|
{{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#lifecycleMarkdown}}
|
|
2198
2201
|
|
|
2199
|
-
{{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#
|
|
2202
|
+
{{CONSUMER_FACT:source:consumer-fact:access-oauth-clients#usageEvidenceMarkdown}}
|
|
2200
2203
|
|
|
2201
2204
|
## Change the correct lifecycle layer
|
|
2202
2205
|
|
|
@@ -3494,9 +3497,10 @@ credentials and unnecessary personal data.`,
|
|
|
3494
3497
|
|
|
3495
3498
|
SCIM lets an identity directory maintain a defined population of users and
|
|
3496
3499
|
organization memberships. Choose it when your directory should own repeatable
|
|
3497
|
-
joiner, mover and leaver changes. The application supports **SCIM Users
|
|
3498
|
-
SCIM Groups
|
|
3499
|
-
organization unit
|
|
3500
|
+
joiner, mover and leaver changes. The application supports **SCIM Users** and
|
|
3501
|
+
**SCIM Groups**. A directory \`department\` can be mapped to one existing
|
|
3502
|
+
organization unit, and a directory group can become an organization unit of its
|
|
3503
|
+
own — see *Provision organization units from your directory*.
|
|
3500
3504
|
|
|
3501
3505
|
> **SCIM provisions access; it does not sign people in.** Configure and prove
|
|
3502
3506
|
> single sign-on separately. A directory-managed person needs both a correctly
|
|
@@ -3588,8 +3592,8 @@ same membership or unit assignment.`,
|
|
|
3588
3592
|
|
|
3589
3593
|
Use this page to decide whether a directory or provisioning bridge is compatible
|
|
3590
3594
|
with this application **before** configuring production users. The application
|
|
3591
|
-
implements a focused SCIM 2.0 User service. It is not a generic LDAP
|
|
3592
|
-
|
|
3595
|
+
implements a focused SCIM 2.0 User and Group service. It is not a generic LDAP
|
|
3596
|
+
endpoint, and its Group resource maps to organization units rather than to roles.
|
|
3593
3597
|
|
|
3594
3598
|
## Supported profile at a glance
|
|
3595
3599
|
|
|
@@ -3597,12 +3601,12 @@ it does not implement SCIM Groups.
|
|
|
3597
3601
|
| --- | --- | --- |
|
|
3598
3602
|
| Protocol | SCIM 2.0 over HTTPS with \`application/scim+json\` | SCIM 1.1 and direct LDAP binds are not accepted |
|
|
3599
3603
|
| Authentication | A dedicated organization SCIM bearer token | The token selects one organization; it is not a user session or ordinary API key |
|
|
3600
|
-
| Resources | \`Users\`
|
|
3601
|
-
| User operations | Create, list, read, full replace, partial update and deactivate; Bulk accepts up to 100 operations | Organization-unit reconciliation differs by operation, as shown below |
|
|
3604
|
+
| Resources | \`Users\`, \`Groups\` and SCIM discovery documents | A \`Group\` is an organization unit, not a role. It is available only once an administrator sets the unit role on the SCIM provisioning configuration; until then every \`/Groups\` request answers 403 |
|
|
3605
|
+
| User operations | Create, list, read, full replace, partial update and deactivate; Bulk accepts up to 100 User or Group operations | Organization-unit reconciliation differs by operation, as shown below |
|
|
3602
3606
|
| Filtering | User lookup filters with a published maximum result size of 200 | Test the provider’s exact matching query before broad rollout |
|
|
3603
3607
|
| Password changes | Not supported | Use the configured human sign-in or SSO journey; do not synchronize directory passwords |
|
|
3604
3608
|
| Sorting and ETags | Not supported | A provider must not require sorting or conditional ETag writes |
|
|
3605
|
-
| Request budget |
|
|
3609
|
+
| Request budget | 6,000 requests per minute for each SCIM token, sized for the request bursts Microsoft Entra ID and Okta send (neither uses Bulk) | A 429 response carries an integer \`Retry-After\`; follow it rather than rotating addresses |
|
|
3606
3610
|
|
|
3607
3611
|
The public discovery documents are available beneath the SCIM base URL:
|
|
3608
3612
|
|
|
@@ -3648,7 +3652,7 @@ and does not prove that the person can complete SSO.
|
|
|
3648
3652
|
| Provider requirement | Compatible expectation |
|
|
3649
3653
|
| --- | --- |
|
|
3650
3654
|
| Discovery | The provider can read \`ServiceProviderConfig\`, \`Schemas\` and \`ResourceTypes\` and respect the advertised feature set |
|
|
3651
|
-
| Resource types | User provisioning works
|
|
3655
|
+
| Resource types | \`/ResourceTypes\` lists both \`User\` and \`Group\`. User provisioning works whether or not the provider calls \`/Groups\` |
|
|
3652
3656
|
| Update behavior | The provider can operate with the documented PUT/PATCH consequences, especially when department controls unit access |
|
|
3653
3657
|
| Authentication | The provider can send the dedicated bearer token in the HTTPS \`Authorization\` header |
|
|
3654
3658
|
| Matching and pagination | Its exact user filter and result-window behavior work within the published limit |
|
|
@@ -3711,9 +3715,9 @@ matched exactly, after trimming, against the organization-unit mapping.
|
|
|
3711
3715
|
| --- | --- | --- |
|
|
3712
3716
|
| \`POST /Users\` | Creates or links the person according to the lifecycle configuration | Reconciles an exact mapped department when unit mapping and a default unit role are configured |
|
|
3713
3717
|
| \`PUT /Users/{id}\` | Replaces the maintained profile and active state | Performs authoritative unit reconciliation from the full department value |
|
|
3714
|
-
| \`PATCH /Users/{id}\` | Applies supported partial profile or active-state changes |
|
|
3718
|
+
| \`PATCH /Users/{id}\` | Applies supported partial profile or active-state changes | Reconciles units only when the PATCH sets or removes the department; a PATCH that does not touch the department leaves unit assignments unchanged |
|
|
3715
3719
|
| \`DELETE /Users/{id}\` | Runs the configured deactivation behavior; it does not physically erase the person | Does not perform a department-to-unit reconciliation |
|
|
3716
|
-
| \`POST /Bulk\` | Executes
|
|
3720
|
+
| \`POST /Bulk\` | Executes each User or Group operation individually, exactly as the same request would on its own | The same effect as the individual operation: a Bulk PUT reconciles like \`PUT\`, a Bulk PATCH like \`PATCH\`. A \`bulkId:\` reference to a resource created earlier in the same request is replaced by its id, so one request can create a user and add them to a new group |
|
|
3717
3721
|
|
|
3718
3722
|
This difference matters with providers that normally send PATCH. Do not enable
|
|
3719
3723
|
authoritative department-to-unit mapping merely because user creation worked.
|
|
@@ -3858,18 +3862,24 @@ plaintext secret is returned once; store it immediately in the identity
|
|
|
3858
3862
|
provider’s secret store. Keep it out of source control, screenshots, logs,
|
|
3859
3863
|
tickets and reusable examples.
|
|
3860
3864
|
|
|
3861
|
-
The current request budget is **
|
|
3862
|
-
|
|
3863
|
-
|
|
3865
|
+
The current request budget is **6,000 requests per minute per token**. It is
|
|
3866
|
+
sized for how identity providers really push: neither Microsoft Entra ID nor
|
|
3867
|
+
Okta uses SCIM Bulk, so a first sync arrives as a burst of individual requests.
|
|
3868
|
+
When the service returns a rate limit, it states an integer \`Retry-After\` in
|
|
3869
|
+
seconds; follow it instead of starting parallel retries.
|
|
3864
3870
|
|
|
3865
3871
|
## Treat deactivation as a high-impact choice
|
|
3866
3872
|
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
+
Deactivation withdraws the person's membership in **this organization only**,
|
|
3874
|
+
together with the access that membership conferred. Their account and their
|
|
3875
|
+
memberships in other organizations are not touched: one organization's
|
|
3876
|
+
directory cannot lock a person out of another.
|
|
3877
|
+
|
|
3878
|
+
A later \`active:true\` restores the membership with the organization's
|
|
3879
|
+
**current default role**, not the roles the person held before. Re-grant any
|
|
3880
|
+
additional role deliberately. A person whose account was disabled by the
|
|
3881
|
+
application operator is not re-enabled by the directory; restoring them is the
|
|
3882
|
+
operator's decision.`,
|
|
3873
3883
|
},
|
|
3874
3884
|
{
|
|
3875
3885
|
managedPath: 'user-administration/scim-microsoft-entra.md',
|
|
@@ -3944,18 +3954,36 @@ Keep the first mapping small and observable:
|
|
|
3944
3954
|
| Account-enabled expression | \`active\` | Test disable and re-enable as separate access events |
|
|
3945
3955
|
| \`department\` | Enterprise User \`department\` | Enable only if department is an access-control authority |
|
|
3946
3956
|
|
|
3947
|
-
This application
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3957
|
+
This application exposes **Users** and **Groups**. A pushed Entra group becomes
|
|
3958
|
+
an organization UNIT, and its members become assignments in that unit carrying
|
|
3959
|
+
the unit role configured on the SCIM provisioning configuration — it does not
|
|
3960
|
+
become a role or a permission set. Enable group provisioning only if you intend
|
|
3961
|
+
your directory's groups to define unit access; leave it off and Entra groups
|
|
3962
|
+
remain purely an Entra-side way to decide who is assigned to the enterprise
|
|
3963
|
+
application.
|
|
3964
|
+
|
|
3965
|
+
Two consequences to plan for. A group this application did not create is never
|
|
3966
|
+
adopted, so an Entra group whose name matches a unit an administrator authored
|
|
3967
|
+
creates a second unit rather than taking over the first. And a group Entra
|
|
3968
|
+
deletes takes its unit, and every assignment in it, with it.
|
|
3969
|
+
|
|
3970
|
+
While the directory is connected, a unit it created is **managed by the
|
|
3971
|
+
directory**: its name and its members are refused if changed in this
|
|
3972
|
+
application, because the next push would put them back. The organization-units
|
|
3973
|
+
screen marks such a unit with its source (SCIM) and the directory's own group
|
|
3974
|
+
identifier. Rename the group, or change who is in it, in Entra. An assignment's
|
|
3975
|
+
unit role, and the unit's code, type, status and position, are not
|
|
3976
|
+
directory-managed and stay editable here. If the directory is disconnected —
|
|
3977
|
+
every SCIM token revoked — the unit becomes editable like any other.
|
|
3951
3978
|
|
|
3952
3979
|
## Treat department-to-unit mapping as a controlled rollout
|
|
3953
3980
|
|
|
3954
|
-
The application reconciles organization units on
|
|
3955
|
-
\`PUT /Users/{id}\`
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3981
|
+
The application reconciles organization units on \`POST /Users\`, on full
|
|
3982
|
+
\`PUT /Users/{id}\`, and on a \`PATCH\` that sets or removes the department — and
|
|
3983
|
+
on the same operations inside \`Bulk\`. A PATCH that does not touch the department
|
|
3984
|
+
leaves unit assignments unchanged. Entra sends PATCH for attribute changes, so
|
|
3985
|
+
confirm that a department move actually reaches the application as a department
|
|
3986
|
+
change before relying on it to remove former unit access.
|
|
3959
3987
|
|
|
3960
3988
|
Before making department authoritative:
|
|
3961
3989
|
|
|
@@ -4030,10 +4058,20 @@ another Okta application whose provisioning connector lets you supply a SCIM
|
|
|
4030
4058
|
base URL and bearer token. If the application later has a reviewed Okta
|
|
4031
4059
|
Integration Network entry, follow that entry instead of duplicating it.
|
|
4032
4060
|
|
|
4033
|
-
The application accepts SCIM **User** resources.
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4061
|
+
The application accepts SCIM **User** and **Group** resources. A pushed group
|
|
4062
|
+
becomes an organization UNIT rather than a role: its members receive the unit
|
|
4063
|
+
role configured on the SCIM provisioning configuration, which confines which
|
|
4064
|
+
records they reach and never widens their permissions. Enable Push Groups only
|
|
4065
|
+
if that is what you intend; otherwise an Okta group can still control which users
|
|
4066
|
+
are assigned to the Okta application without being pushed.
|
|
4067
|
+
|
|
4068
|
+
Note that Okta creates a group without an \`externalId\`, which this application
|
|
4069
|
+
handles: the group is identified by the id returned when it was created.
|
|
4070
|
+
|
|
4071
|
+
A pushed group's name and members are managed by Okta while it stays connected:
|
|
4072
|
+
changing either in this application is refused, because the next push would
|
|
4073
|
+
restore it. Make those changes in Okta; unit roles and the unit's other settings
|
|
4074
|
+
stay editable here.
|
|
4037
4075
|
|
|
4038
4076
|
## Connect Okta
|
|
4039
4077
|
|
|
@@ -4068,10 +4106,11 @@ Map Okta’s department to the SCIM Enterprise User extension only when it is
|
|
|
4068
4106
|
authoritative enough to change access. Then map exact department values to
|
|
4069
4107
|
existing application organization units.
|
|
4070
4108
|
|
|
4071
|
-
> **Operation
|
|
4072
|
-
>
|
|
4073
|
-
>
|
|
4074
|
-
>
|
|
4109
|
+
> **Operation boundary:** organization-unit reconciliation runs on user creation,
|
|
4110
|
+
> full replacement, and a PATCH that sets or removes the department, including the
|
|
4111
|
+
> same operations inside Bulk. A PATCH that does not touch the department leaves
|
|
4112
|
+
> unit assignments unchanged. Capture the operation Okta sends for a department
|
|
4113
|
+
> change and prove that the old unit assignment is removed before production rollout.
|
|
4075
4114
|
|
|
4076
4115
|
## Prove one complete lifecycle
|
|
4077
4116
|
|
|
@@ -4152,7 +4191,7 @@ compliant SCIM User. A common starting point is:
|
|
|
4152
4191
|
| \`sn\` | \`name.familyName\` | Empty-value behavior |
|
|
4153
4192
|
| \`displayName\` | \`displayName\` | Which system owns later edits |
|
|
4154
4193
|
| \`department\` | Enterprise User \`department\` | Whether it is authoritative for unit access |
|
|
4155
|
-
| Disabled-account state | \`active:false\` |
|
|
4194
|
+
| Disabled-account state | \`active:false\` | Withdraws the membership in this organization only; the account and other memberships stay |
|
|
4156
4195
|
|
|
4157
4196
|
These are mapping decisions, not guaranteed attributes in every LDAP schema.
|
|
4158
4197
|
Inspect representative entries and document the source object classes,
|
|
@@ -4198,8 +4237,10 @@ A production bridge needs all of the following:
|
|
|
4198
4237
|
- a tested response to rate limiting, token rotation and partial batch failure.
|
|
4199
4238
|
|
|
4200
4239
|
Do not use Bulk for a first implementation merely for speed. The application
|
|
4201
|
-
supports a bounded Bulk request
|
|
4202
|
-
|
|
4240
|
+
supports a bounded Bulk request whose operations behave exactly as the same
|
|
4241
|
+
individual requests, but a Bulk response reports each operation's status
|
|
4242
|
+
separately, which makes failures harder to observe. Start with observable
|
|
4243
|
+
individual operations.
|
|
4203
4244
|
|
|
4204
4245
|
## Validate before production
|
|
4205
4246
|
|
|
@@ -4304,8 +4345,9 @@ flowchart LR
|
|
|
4304
4345
|
Reconciliation becomes active only with at least one explicit mapping and a
|
|
4305
4346
|
default unit role. On supported direct user creation and full replacement, the
|
|
4306
4347
|
directory becomes authoritative: a changed, blank or unmapped department can
|
|
4307
|
-
remove former assignments, including manual ones.
|
|
4308
|
-
|
|
4348
|
+
remove former assignments, including manual ones. A PATCH performs this
|
|
4349
|
+
reconciliation only when it sets or removes the department; Bulk operations
|
|
4350
|
+
behave as the same individual requests. Prove the exact operation used by
|
|
4309
4351
|
your identity provider.`,
|
|
4310
4352
|
},
|
|
4311
4353
|
{
|
|
@@ -4345,8 +4387,9 @@ unit assignment and sign-in behavior after every change.
|
|
|
4345
4387
|
unit assignment was removed.
|
|
4346
4388
|
6. **Send blank, unmapped and wrong-case departments.** Verify the exact result
|
|
4347
4389
|
before making mapping authoritative.
|
|
4348
|
-
7. **Deactivate a multi-organization person.**
|
|
4349
|
-
|
|
4390
|
+
7. **Deactivate a multi-organization person.** Confirm that only this
|
|
4391
|
+
organization's membership became inactive and their other memberships
|
|
4392
|
+
are unchanged.
|
|
4350
4393
|
8. **Recover the person.** Confirm that the user and intended membership are
|
|
4351
4394
|
both **Active** and that enterprise sign-in succeeds.
|
|
4352
4395
|
|
|
@@ -4417,7 +4460,7 @@ change completed successfully.
|
|
|
4417
4460
|
| **409** | An existing identity or membership conflicts; inspect it instead of creating a duplicate |
|
|
4418
4461
|
| **429** | Follow retry information and reduce concurrency |
|
|
4419
4462
|
| Profile value is missing | Test the exact mapping expression against the real directory payload |
|
|
4420
|
-
| Unit did not change | Confirm exact department value and case, explicit mapping, existing unit, default role and
|
|
4463
|
+
| Unit did not change | Confirm exact department value and case, explicit mapping, existing unit, default role, and that the operation carried the department (create, full replacement, or a PATCH that sets it) |
|
|
4421
4464
|
| Person remains unable to sign in | Check enterprise sign-in, global user state and organization membership state separately |
|
|
4422
4465
|
|
|
4423
4466
|
## Recover safely
|
|
@@ -4898,7 +4941,8 @@ parser, transformation, index or detection rule accepted the event.
|
|
|
4898
4941
|
| One HTTPS request containing one JSON object, with a static header or HMAC credential | Test direct delivery | This matches the current structured-JSON worker closely |
|
|
4899
4942
|
| A provider-specific wrapper around the event | Use a narrow relay unless the exact endpoint accepts the native envelope | The relay owns the wrapper while preserving source identifiers |
|
|
4900
4943
|
| Short-lived OAuth access tokens or managed identity | Use a provider-side relay | Token acquisition and refresh do not belong in a static credential field |
|
|
4901
|
-
| A JSON array
|
|
4944
|
+
| A plain JSON array of events | Test direct delivery with \`batchSize\` above 1 | A batch of \`json_structured\` or \`ocsf\` events is sent as one JSON array |
|
|
4945
|
+
| A provider-specific batch protocol | Use a relay that batches deliberately | Batching sends a plain array or one line per event, never a provider wrapper |
|
|
4902
4946
|
| A syslog, agent, queue or private-network input | Use an adapter or relay inside that boundary | The application sends outbound HTTPS webhooks, not those transports |
|
|
4903
4947
|
| CEF, LEEF or OCSF ingestion | Test actual emitted samples with the receiver | A format name does not prove field mapping, escaping, severity or class compatibility |
|
|
4904
4948
|
|
|
@@ -4956,13 +5000,92 @@ application path you operate.
|
|
|
4956
5000
|
|
|
4957
5001
|
{{CONSUMER_FACT:source:consumer-fact:organization-siem-export#deliveryValuesMarkdown}}
|
|
4958
5002
|
|
|
4959
|
-
|
|
4960
|
-
|
|
4961
|
-
|
|
4962
|
-
\`
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
5003
|
+
With the default \`batchSize\` of 1, each event is its own HTTP request. Set
|
|
5004
|
+
\`batchSize\` above 1 and this destination's events wait, then travel together:
|
|
5005
|
+
a batch is sent as soon as \`batchSize\` events are waiting, or when the oldest has
|
|
5006
|
+
waited \`batchWindowSeconds\`. A batch is one request body, framed the way its format
|
|
5007
|
+
frames several records:
|
|
5008
|
+
|
|
5009
|
+
| Format | Body of a batch |
|
|
5010
|
+
| --- | --- |
|
|
5011
|
+
| \`json_structured\`, \`ocsf\` | A JSON array of the events |
|
|
5012
|
+
| \`cef\`, \`leef\` | One line per event, separated by newlines |
|
|
5013
|
+
|
|
5014
|
+
A batch that holds one event is sent exactly like a single event, with no array and
|
|
5015
|
+
no trailing newline, so a receiver written for one event per request keeps working
|
|
5016
|
+
until you raise \`batchSize\`. If the receiver answers \`413 Payload Too Large\`, the
|
|
5017
|
+
batch is halved and sent again until the receiver accepts it; the events left out
|
|
5018
|
+
go in the next request. Size a receiver, load balancer or billing estimate on the
|
|
5019
|
+
batch size you choose.
|
|
5020
|
+
|
|
5021
|
+
## Limit what an exported event carries
|
|
5022
|
+
|
|
5023
|
+
\`exportProjection\` decides what this destination receives. It is the only place
|
|
5024
|
+
an export can be narrowed **before** the data leaves; everything else — a filter,
|
|
5025
|
+
a severity minimum — decides *whether* an event is sent, not *what* it contains.
|
|
5026
|
+
|
|
5027
|
+
Set it per destination, not per application: two receivers under two different
|
|
5028
|
+
agreements are two different answers.
|
|
5029
|
+
|
|
5030
|
+
| Declaration | Admits |
|
|
5031
|
+
| --- | --- |
|
|
5032
|
+
| \`disclosedTiers: ["attribution"]\` | the user's email address, IP address, user agent, geolocation and client-install identifier |
|
|
5033
|
+
| \`disclosedTiers: ["context"]\` | correlation identifier, originating frontend, organization and application names, authentication method and source |
|
|
5034
|
+
| \`disclosedTiers: ["detail"]\` | the per-event \`eventData\` object **and the outcome reason**, subject to the next row |
|
|
5035
|
+
| \`disclosedEventDataClasses: ["administrative"]\` | only the \`eventData\` of events describing configuration or system state |
|
|
5036
|
+
| \`disclosedEventDataClasses: ["subject-detail"]\` | also the \`eventData\` of events describing a person |
|
|
5037
|
+
|
|
5038
|
+
**Declaring \`detail\` while withholding \`attribution\` is the mistake to avoid.**
|
|
5039
|
+
An authentication event's \`eventData\` carries the email address and IP address
|
|
5040
|
+
that withholding attribution was meant to keep back, so the narrowing reads as a
|
|
5041
|
+
control while changing nothing that matters. Pair it with
|
|
5042
|
+
\`disclosedEventDataClasses: ["administrative"]\`.
|
|
5043
|
+
|
|
5044
|
+
The outcome reason sits in \`detail\` rather than \`context\` for the same reason,
|
|
5045
|
+
and it is worth understanding before you rely on either tier. It is not a field of
|
|
5046
|
+
its own: the application lifts it out of the event's own \`eventData\`. Most of the
|
|
5047
|
+
time it is a short, impersonal failure reason — but **19 event types carry a
|
|
5048
|
+
reason somebody typed**, including organization lifecycle changes, emergency
|
|
5049
|
+
access, forced password resets and retained-data access, where it is the
|
|
5050
|
+
operator's own words and may name anyone. Withholding an event's detail therefore
|
|
5051
|
+
withholds its reason too.
|
|
5052
|
+
|
|
5053
|
+
A **floor always survives** whatever you declare: event identifier, event type,
|
|
5054
|
+
category, severity, timestamp, organization, the acting user's identifier, source
|
|
5055
|
+
service, source version, source environment, and outcome. Two reasons, and only
|
|
5056
|
+
the first is about privacy. The event identifier is what your receiver
|
|
5057
|
+
de-duplicates on, and deliveries are retried — an export minimized past it
|
|
5058
|
+
produces duplicates in your SIEM rather than fewer records. The event type,
|
|
5059
|
+
severity and source version are header fields of the CEF and LEEF grammars, which
|
|
5060
|
+
are positional: omitting one does not shorten the record, it corrupts every field
|
|
5061
|
+
after it. The acting user's identifier is an opaque reference, never a name or an
|
|
5062
|
+
address, so it lets you correlate one actor's activity without receiving their
|
|
5063
|
+
identity — which is usually the trade a minimized export exists to make.
|
|
5064
|
+
|
|
5065
|
+
One capability cost to know about, because nothing warns you at the time:
|
|
5066
|
+
withholding \`detail\` makes OCSF exports coarser. The application refines an
|
|
5067
|
+
API-activity event's \`activity_id\` by reading the verb out of \`eventData\`, so
|
|
5068
|
+
with the object withheld a create and a delete both report the generic
|
|
5069
|
+
\`Other\` activity and share a \`type_uid\`. The event type is still carried in
|
|
5070
|
+
\`activity_name\` and \`metadata.event_code\`, so nothing is wrong — but a
|
|
5071
|
+
detection rule or dashboard that groups by \`type_uid\` will stop separating them.
|
|
5072
|
+
CEF, LEEF and structured JSON are unaffected.
|
|
5073
|
+
|
|
5074
|
+
Withheld fields are **absent**, not empty. No blank CEF custom-string slot, no
|
|
5075
|
+
null JSON key, no empty OCSF attribute — so a receiver's "field is present but
|
|
5076
|
+
empty" rule will not fire, and a rule keyed on a withheld field simply never
|
|
5077
|
+
matches. The same projection applies to every wire format, because it is applied
|
|
5078
|
+
once, before the event is signed and queued, rather than per format.
|
|
5079
|
+
|
|
5080
|
+
Omit the whole block and the destination receives the full envelope. That is the
|
|
5081
|
+
behaviour of every destination configured before this control existed, so
|
|
5082
|
+
introducing it changes nothing until you declare a narrowing.
|
|
5083
|
+
|
|
5084
|
+
Verify a narrowing the way you verify a filter: perform one controlled event,
|
|
5085
|
+
read the received copy, and confirm both that the withheld fields are absent and
|
|
5086
|
+
that the event identifier still matches the source audit record. Minimization
|
|
5087
|
+
does not alter the source audit trail — the full record remains in the
|
|
5088
|
+
application, and a narrowed feed is not evidence that less was recorded.
|
|
4966
5089
|
|
|
4967
5090
|
## Filter for purpose and volume
|
|
4968
5091
|
|
|
@@ -5102,7 +5225,7 @@ Recommended application settings:
|
|
|
5102
5225
|
| Destination | Relay HTTPS URL dedicated to the organization/environment |
|
|
5103
5226
|
| Authentication | \`hmac_sha256\` or a dedicated \`api_key_header\` |
|
|
5104
5227
|
| Format | \`json_structured\` |
|
|
5105
|
-
| Delivery |
|
|
5228
|
+
| Delivery | \`batchSize\` 1 (one event per request) unless the relay accepts a JSON array; choose timeout/retry values below the relay’s bounded acknowledgement time |
|
|
5106
5229
|
|
|
5107
5230
|
If a controlled test proves direct HEC compatibility, configure:
|
|
5108
5231
|
|
|
@@ -5154,9 +5277,9 @@ this guide defines the application envelope that must be conserved.`,
|
|
|
5154
5277
|
Microsoft Sentinel commonly receives custom data through the Azure Monitor Logs
|
|
5155
5278
|
Ingestion API. That API requires a Data Collection Rule (DCR), a matching JSON
|
|
5156
5279
|
schema and Microsoft Entra OAuth authorization. The application’s SIEM exporter
|
|
5157
|
-
uses a static outbound credential and posts one JSON object per event
|
|
5158
|
-
|
|
5159
|
-
|
|
5280
|
+
uses a static outbound credential and posts one JSON object per event, or a plain
|
|
5281
|
+
JSON array when \`batchSize\` is above 1; it does not acquire or refresh Azure OAuth
|
|
5282
|
+
tokens and does not shape events to the Data Collection Rule's schema. **Use an Azure-hosted relay rather than pointing
|
|
5160
5283
|
the application directly at the Logs Ingestion API.**
|
|
5161
5284
|
|
|
5162
5285
|
{{CONSUMER_FACT:source:consumer-fact:organization-siem-export#markdown}}
|
|
@@ -5350,8 +5473,8 @@ cause uncontrolled field growth.
|
|
|
5350
5473
|
the document is absent.
|
|
5351
5474
|
6. Return a temporary 503, restore the endpoint and prove dead-letter recovery
|
|
5352
5475
|
without an unintended duplicate detection.
|
|
5353
|
-
7. Record receiver capacity for **one request per
|
|
5354
|
-
|
|
5476
|
+
7. Record receiver capacity for the request rate you configure: **one request per
|
|
5477
|
+
selected event** at the default \`batchSize\` of 1, or one per batch above it.
|
|
5355
5478
|
|
|
5356
5479
|
## Elastic documentation to keep with the runbook
|
|
5357
5480
|
|
|
@@ -7177,7 +7300,7 @@ A concrete request and its response, using the members of your own organization:
|
|
|
7177
7300
|
|
|
7178
7301
|
~~~bash
|
|
7179
7302
|
curl --fail-with-body \\
|
|
7180
|
-
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=1&limit=20&sort=
|
|
7303
|
+
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=1&limit=20&sort=createdAt:desc" \\
|
|
7181
7304
|
--header "Authorization: $ORGANIZATION_API_KEY" \\
|
|
7182
7305
|
--header "accept: application/json"
|
|
7183
7306
|
~~~
|
|
@@ -7283,7 +7406,7 @@ Now list the organization's members. This exercises the collection envelope you
|
|
|
7283
7406
|
|
|
7284
7407
|
~~~bash
|
|
7285
7408
|
curl --fail-with-body \\
|
|
7286
|
-
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?limit=5&sort=
|
|
7409
|
+
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?limit=5&sort=createdAt:desc" \\
|
|
7287
7410
|
--header "Authorization: $ORGANIZATION_API_KEY" \\
|
|
7288
7411
|
--header "accept: application/json"
|
|
7289
7412
|
~~~
|
|
@@ -7348,7 +7471,7 @@ An empty \`data\` array on page 1 is a valid answer. Confirm the organization an
|
|
|
7348
7471
|
page=1
|
|
7349
7472
|
while : ; do
|
|
7350
7473
|
response=$(curl --fail-with-body --silent \\
|
|
7351
|
-
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=$page&limit=100&sort=
|
|
7474
|
+
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members?page=$page&limit=100&sort=createdAt:asc" \\
|
|
7352
7475
|
--header "Authorization: $ORGANIZATION_API_KEY" \\
|
|
7353
7476
|
--header "accept: application/json")
|
|
7354
7477
|
echo "$response" | jq -c '.data[]' >> members.ndjson
|
|
@@ -7360,7 +7483,7 @@ done
|
|
|
7360
7483
|
|
|
7361
7484
|
Three rules keep a scan correct:
|
|
7362
7485
|
|
|
7363
|
-
1. **Sort by a field the reference lists as sortable, or a stable timestamp** such as \`
|
|
7486
|
+
1. **Sort by a field the reference lists as sortable, or a stable timestamp** such as \`createdAt:asc\` for members (when the membership was created), when you walk more than one page. A sort field the operation does not accept is ignored, not refused, and the default order applies; sorting by a field that changes during the scan (a status, a name being edited) can move a record between pages and make you skip or repeat it.
|
|
7364
7487
|
2. **Stop on \`totalPages\`**, not on a short page. The last page is short by definition; an earlier page is short only when records were deleted while you scanned.
|
|
7365
7488
|
3. **Process each record idempotently** and key your own records on \`_id\`. If the scan is interrupted, resume from the last page whose work you completed; repeating a page is safe when processing is idempotent, skipping one never is.
|
|
7366
7489
|
|
|
@@ -7370,7 +7493,7 @@ Search operations (\`…/search\`) add \`q\` for free text. Combine it with filt
|
|
|
7370
7493
|
|
|
7371
7494
|
~~~bash
|
|
7372
7495
|
curl --fail-with-body \\
|
|
7373
|
-
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members/search?q=morgan&status=ACTIVE&sort=
|
|
7496
|
+
--url "$BASE_URL/api/v1/organizations/$ORGANIZATION_ID/organization-members/search?q=morgan&status=ACTIVE&sort=createdAt:desc" \\
|
|
7374
7497
|
--header "Authorization: $ORGANIZATION_API_KEY" \\
|
|
7375
7498
|
--header "accept: application/json"
|
|
7376
7499
|
~~~
|