Your workspace
One sign-in, every internal tool. Your access follows your Okta account — the moment it changes there, it changes everywhere.
One sign-in, every internal tool. Your access follows your Okta account — the moment it changes there, it changes everywhere.
One canonical user store, fed by the connected IdPs. Tools never talk to Okta again — they ask the hub.
All identities across the connected IdPs, with every profile attribute. Click a row for details and the kill switch.
| Name | Source | Status | Access | Updated |
|---|
Each connection is one IdP org. Pull sync via API token, plus an Okta Event Hook for instant deprovisioning.
Tools that consume users from the hub. Registered canisters may call checkAccess(email); the push contract below is what every future tool ships by default.
| Name | Canister | Note | Sources |
|---|
checkAccess:Syncs, event hooks, admin actions — newest first.
The hub is one canister pair on DFINITY's dedicated cloud engine. It syncs the IdP directories into a canonical user store, signs users in via OIDC, and is the single access authority for the in-house tools.
/oauth2/v1/token (scope okta.users.read only), and pages GET /api/v1/users. Read-only: the hub never writes to any IdP. Users missing from a full pull are marked deprovisioned.checkAccess(email) (restricted to registered connector canisters + admins) on login/session validation. The hub is the single access authority; a user's Internet Identity may continue to exist, but no connected tool lets them in once the hub says inactive.
| Material | Where | Exposure |
|---|---|---|
| ES256 signing keys (sync auth) | generated in-canister from IC randomness | never leave the canister; Okta gets the public JWK only; rotatable per click |
| Okta side | API Services app per org | least privilege: scope okta.users.read + Read-only Administrator role; no SSWS tokens, no shared secrets |
| Event-hook secrets | 256-bit raw_rand, in the hook URL path | known to Okta admins only; rotatable; bad-secret calls rejected with 403 |
| SSO session tokens | 512-bit raw_rand, stored server-side | bearer token in the user's browser (localStorage); 8 h TTL; server-side revocation on logout/deactivation |
| Google client secret | canister state, write-only (masked in every view) | required by Google web clients; Okta SSO uses PKCE without any secret |
is_replicated=false) — REQUIRED, because auth codes and token mints are single-use and would otherwise be sent once per replica. Consequence: a malicious node on our own engine could in principle forge an outcall response. This is the platform trust base of everything on the engine, not specific to this app.ssoExchange: input size caps, https-only redirect URI, global rate limit (60 attempts / 5 min) — protects the IdPs' rate limits from anonymous floods.user-hub-app-onboarding, so the assistant applies identical steps on every integration.| Name | URL | Note |
|---|
| Name | Type | Client ID | Status |
|---|
| Name | Principal |
|---|