Skip to main content
Version: Next

Signaling authentication

The SSO bridge issues audience-bound data plane signaling tokens through POST /api/oauth/token. Request grant_type=client_credentials, scope=dplane-signaling and audience=<receiving plane identity> with the client's usual authentication. resource is an alias for audience; if both are supplied they must agree.

Deployment configuration authorizes each signaling target. Ordinary application permissions do not grant signaling authority. Shared workers use managedSignalingTargets and a fresh tenant workload grant. Static integrations use signalingClients; both paths require the exact execute permission:

Caller roleRequired permissionAudience
controlplaneexecute:dp.transferReceiving data plane identity
dataplaneexecute:cp.transferReceiving control plane identity

The mapping contains an explicit audience allowlist. Do not put control plane receivers in a control plane caller's allowlist, or data plane receivers in a data plane caller's allowlist. The receivers also verify the direction's permission. Broad management permissions alone do not satisfy this issuance check.

signalingClients:
- clientId: cp-tenant-a-credential
tenant: tenant-a
identity: controlplane-a
role: controlplane
audiences: [dataplane-a]
- clientId: dp-tenant-a-credential
tenant: tenant-a
identity: dataplane-a
role: dataplane
audiences: [controlplane-a]

Create the OAuth clients separately with explicit kind: workload, canonical tenantId, registered audiences, grants: [client_credentials] and the required permission ceilings above. Apply the current tenant grant and principal mapping through Tenant Management. The mapping does not create clients or assign permissions. Use a separate OAuth client for each tenant and caller role, and keep exactly one mapping per client.

tenant is the receiving tenant's slug. identity becomes the JWT client_id and defaults to the authenticated OAuth client ID. sub defaults to that plane identity. An optional fixed subject overrides sub for integrations such as Siglet, where it must equal the participant context ID in the request path. Request parameters cannot change the configured tenant, plane identity or subject. The azp claim retains the authenticated OAuth client ID.

signalingClients:
- clientId: cp-siglet-tenant-a-credential
tenant: tenant-a
identity: controlplane-a
subject: siglet-participant-context-a
role: controlplane
audiences: [siglet-dataplane-a]

Static mappings also require an active managed organization and current target authorization. A mapping alone cannot establish a tenant grant. The issuer signs tokens with its persistent key set. Public keys are available at the jwks_uri published by its OpenID metadata. Configure receivers with that issuer, its JWKS and their own exact audience. Tokens carry aud, sub, client_id, tenant, scope, permissions, iat, exp and jti, canonical tenant_id and authorization revision. Client credentials grants do not issue refresh tokens.

Signaling tokens expire after at most 30 seconds, or earlier when their current authorization snapshot expires. The same rule applies to shared workers, dedicated workers and static mappings. Receivers verify JWTs locally; missing or stale tenant grants deny issuance.

The control plane renews shared execution leases every 10 seconds and requests tokens with at least 20 seconds left. The default signaling-token cache refreshes when fewer than 10 seconds remain, so dedicated workers normally need a new managed signaling token about every 20 seconds. Shared workers bound execution by both token expiry and the control plane's execution deadline. These timings leave room for renewal while limiting stale authorization to 30 seconds.

Existing installations​

The managed CLI stack supplies organization management and consumer access. It does not provision data-plane workloads, static signaling aliases or use-case apps. Configure a worker's exact issuer, audience, canonical execution owners and managed Control Plane profile explicitly. The managed HTTP sample documents a complete shared-worker topology.

Preserve each existing worker's registered dataplaneId, database and signing key. Explicitly import its participant and service grants through Tenant Management. Changing a worker identity leaves existing transfers bound to the old registration. Drain old unowned transfers and start fresh managed transfers; do not assign their ownership from a guessed slug or reset databases to bypass import. Review existing client kinds, scopes, audiences and permissions explicitly, because old unbound clients cannot issue tokens.