Skip to main content

Identity and Access

shared::iam::IamScopesClient owns the canonical SCM scope API. Enable iam and configure the client's endpoint explicitly, including /iam/v1. The frozen default service is https://api.apps.paloaltonetworks.com/iam/v1; the SDK does not infer another origin from an AIRS endpoint. An endpoint selected with Client::with_endpoint must already be admitted by the caller's policy.

The constructor requires SCM OAuth and derives x-tsg-id from the provider's immutable tenant identity. It retains that provider, the destination policy, transport, cancellation session, and concurrency limiter. No caller header can replace tenant or authentication fields. IAM requires a tenant administrator; workspace-scoped authorization does not establish access to these resources.

MethodContract
listGET /scopes; return observed count and items, including unknown response fields
getGET /scopes/{name}; the display ID name:tsg is not a path key
createPOST /scopes; omitted description/resources become ""/[]
updatePUT /scopes/{name}; full replacement, with the path name repeated in the body
bind_workspaceRead, preserve existing bindings, append one missing workspace binding, then replace
deleteExperimental DELETE /scopes/{name} inferred by the frozen SDK; live support unverified

Names used as path keys follow the frozen grammar [A-Za-z0-9_][A-Za-z0-9_.-]*, within the shared identifier bound. Create retains the frozen request schema's nonempty body-name rule. Resource metadata omitted on writes becomes []; provided metadata is preserved. Create-input extension fields are ignored because the frozen helper constructs an explicit write body. Resource-input extensions are subject to the source's strict write schema.

update clears resources when they are omitted. bind_workspace preserves known resource bindings and metadata and does not append an identical workspace binding twice. As in the frozen helper, it still sends the PUT when the binding already exists. Unrecognized response resource fields are not copied into the strict write schema. The workspace slug is validated before the initial GET; this deliberately prevents a failed-input workflow from starting network work.

Both binding steps share one absolute deadline and cancellation token. Reads permit bounded safe retries; POST, PUT, and DELETE do not automatically replay, including a PUT whose intended result is idempotent. Cancellation or failure after dispatch can leave the remote mutation outcome unknown. Inspect server state before deciding whether to repeat a write. Binding is a read-modify-write workflow without an upstream transaction or conditional write; concurrent writers can overwrite each other's changes. It provides no snapshot guarantee.

The frozen IAM models derive from dated observed traffic, rather than a published OpenAPI specification. Independent credential-free tests cover all six methods, exact paths/headers/bodies, defaults, additive binding, deadlines, cancellation, validation before authentication, sanitized failures, and mutation replay prevention. Live acceptance has not been performed for this Rust SDK. DELETE retains the source's explicit experimental status: 404/405 is a service rejection, and automatic rollback must not assume deletion succeeded.

Management token administration​

airs::management::OAuthManagementClient administers application tokens using the management endpoint and SCM OAuth bearer authentication. It omits x-tsg-id as the frozen management client does, while keeping the same provider identity and shared resources. These operations do not alter the service-token cache.

get_access_token sends the generated ClientIdAndCustomerApp body to POST /v1/mgmt/oauth/client_credential/accesstoken. GetTokenOptions optionally adds tokenTtlInterval and tokenTtlUnit query values. Intervals use finite numbers with JavaScript-compatible decimal formatting; units and permitted ranges remain service-defined. The generated Oauth2Token result preserves unknown response fields and redacts ordinary formatting. Its token data is available through explicit field access.

invalidate_token takes &Secret, sends the same body to POST /v1/mgmt/oauth/invalidateToken, and encodes the token as query data. The response is a JSON string confirmation. Arbitrary text or another JSON type produces a sanitized decode error. Both POST operations prohibit automatic replay after an uncertain failure. Models, options, requests, clients, and errors omit token values from ordinary formatting; callers own any explicit API data they choose to log.