client_id e client_secret (Basic Auth)https://auth.aworld.cloud/oauth2/token con grant_type=client_credentialsaccess_token con scope configuratiapp/read: lettura dati end-user APIapp/write: scrittura dati end-user API (es. log attività per conto utente)dashboard/read: lettura configurazioni e analyticsdashboard/write: creazione/modifica missioni, contenuti, utentix-external-user-id (identificativo utente del vostro sistema) o x-user-id (ID utente interno AWorld) per specificare l'utente da impersonare, uno per richiestaauth.{CUSTOM_DOMAIN} con routing selettivoexpiresAt > now prima del return/oauth2/token → Lambda (con caching logic per client_credentials)/.well-known/openid-configuration → Lambda (cached response con URL rewriting)workspaceId nel token e workspace richiestoidentityId come principalIsAuthorizedWithToken API di Verified PermissionsworkspaceId, resourceId estratti dalla URL| Claim | Descrizione | Importanza sicurezza |
|---|---|---|
sub | Cognito user ID | Identificativo univoco utente |
workspaceId | Workspace ID | CRITICO: Isolamento multi-tenant |
accountId | Account ID | Tenant di appartenenza |
userId | Application user ID | ID utente applicativo |
context | "dashboard" | "app" | Contesto API autorizzato |
platform | "web" | "mobile" | "m2m" | Tipo client |
role | Ruolo utente | Permessi RBAC |
exp | Unix timestamp | Scadenza token |
platform: "m2m"x-external-user-id: {externalId}: l'identificativo dell'utente nel sistema del client, impostato come externalId alla creazione dell'utente. Il client non deve mai salvare gli ID interni di AWorldx-user-id: {userId}: l'ID utente interno AWorld400 se vengono inviati entrambi gli header401 se nessun header è presente su un endpoint che richiede un utente401 se l'utente non esiste in quel workspaceplatform: "web" o "mobile") non sono mai interessati: gli header vengono ignoratiuserId: ID utente da impersonareprincipalId: Principal ID utentelang, timezone, currency: Preferenze utentestatus: Stato dell'utenteapp/write o dashboard/write