Skip to Content

Claim JWT Personalizzati

I claim personalizzati consentono di incorporare dati aggiuntivi direttamente nel JWT access token emesso da Auris. Invece di effettuare una chiamata API separata per recuperare i dati utente dopo l’autenticazione, il tuo backend può leggere il claim direttamente dal token verificato.

I claim personalizzati vengono configurati per applicazione nella Console e risolti al momento dell’emissione del token.


Quando Usare i Claim Personalizzati

I claim personalizzati sono utili quando:

  • Il tuo backend ha bisogno di metadati utente (dipartimento, piano, tenant ID) su ogni richiesta senza una ricerca aggiuntiva
  • Un’API di terze parti si aspetta claim specifici nel JWT (es. un gateway di pagamento che si aspetta un claim subscription_tier)
  • Vuoi codificare informazioni su permessi o ruoli nel token per un’autorizzazione stateless
  • Diverse applicazioni nel tuo tenant necessitano di dati utente diversi nei loro token

I claim negli access token sono leggibili da chiunque detenga il token. Non incorporare dati sensibili (password, segreti, dati finanziari) nei claim JWT. I claim sono inclusi anche nella dimensione del token — payload di grandi dimensioni aumentano la dimensione di ogni header HTTP Authorization.


Tipi di Claim

Auris supporta quattro tipi di valori per i claim:

STATIC

Un valore stringa, numerico o booleano fisso — lo stesso per ogni utente che riceve un token da questa applicazione.

{ "environment": "production" } { "app_version": "2.1.0" } { "feature_flag_x": true }

Usa quando: Devi identificare quale applicazione ha emesso il token, o incorporare valori di configurazione che non cambiano per utente.

USER_ATTRIBUTE

Un valore derivato dal profilo dell’utente autenticato. Gli attributi disponibili sono:

Chiave AttributoDescrizione
emailIndirizzo email principale dell’utente
firstNameNome dell’utente
lastNameCognome dell’utente
usernameUsername dell’utente
phoneNumberNumero di telefono verificato dell’utente
metadataL’intero oggetto JSON dei metadati utente
metadata.{key}Una chiave specifica dal JSON dei metadati utente
{ "user_email": "[email protected]" } { "department": "engineering" } // tramite metadata.department { "phone": "+39 333 1234567" }

Usa quando: Il tuo backend o servizio downstream ha bisogno dei dati di identità utente disponibili nel token senza chiamate API aggiuntive.

ROLE_BASED

Un valore diverso restituito in base ai ruoli che l’utente possiede. Il primo ruolo corrispondente vince. Un valore di fallback viene restituito se nessun ruolo corrisponde.

// Configurazione: { "plan": { "Amministratore": "enterprise", "Utente Pro": "pro", "default": "free" } } // Claim risultante per un Utente Pro: { "plan": "pro" } // Claim risultante per un Amministratore: { "plan": "enterprise" } // Claim risultante per un utente senza ruolo corrispondente: { "plan": "free" }

Usa quando: Ruoli diversi nel tuo sistema corrispondono a livelli di funzionalità, livelli di accesso o piani tariffari su cui i servizi downstream devono agire.

EXPRESSION

Un valore calcolato usando una semplice espressione valutata nel contesto utente. Le espressioni hanno accesso alle variabili user, roles e metadata.

// Le espressioni sono simili a JavaScript (valutate in un contesto sandbox) user.email.split('@')[1] // => "acme.com" (dominio email) roles.includes('Amministratore') // => true | false metadata.orgId ?? 'default' // => orgId dai metadati o "default" user.firstName + ' ' + user.lastName // => "Mario Rossi"

Le espressioni vengono valutate in un contesto sandbox. Non hanno accesso a require, import, process, eval, chiamate di rete o operazioni sul file system.

Usa quando: Hai bisogno di un valore derivato o calcolato che non è direttamente disponibile come attributo utente.


Claim Riservati

Le seguenti chiavi di claim sono riservate da Auris e dalla specifica OAuth2/OIDC. Non possono essere sovrascritte dai claim personalizzati:

Claim RiservatoDescrizione
issEmittente del token (il tuo dominio Auris)
subSubject — l’ID dell’utente
audAudience — il tuo client ID
expTimestamp di scadenza
iatTimestamp di emissione
jtiJWT ID (identificatore univoco del token)
typeTipo di token (user o m2m)
scopeScope OAuth concessi
rolesArray dei nomi dei ruoli dell’utente
emailEmail dell’utente (dai claim standard OIDC)
nameNome visualizzato dell’utente

Tentare di creare un claim personalizzato con una chiave riservata restituisce un errore di validazione.


Configurazione nella Console

Apri la configurazione Custom Claims

Nella Console Auris, vai su Applicazioni → seleziona la tua applicazione → scheda Custom Claims.

Aggiungi un claim

Clicca Aggiungi Claim e configura:

  • Claim Key: La chiave JSON nel token (es. department, plan, tenant_id)
  • Tipo Claim: STATIC, USER_ATTRIBUTE, ROLE_BASED o EXPRESSION
  • Valore: Configurazione del valore specifica per tipo

Anteprima del claim

Usa il pulsante Anteprima per risolvere il claim per un utente specifico prima di salvare. Questo chiama l’endpoint API di anteprima con i dati reali dell’utente.

Attiva il claim

Attiva il toggle Attivo sul claim. I claim disattivati vengono saltati durante l’emissione del token (utile per testare senza eliminare la configurazione).


Esempi

Esempio 1: Incorporare il Dipartimento dell’Utente

Requisito: Il tuo backend deve conoscere il dipartimento dell’utente su ogni richiesta.

Configurazione:

  • Claim Key: department
  • Tipo: USER_ATTRIBUTE
  • Attributo: metadata.department

Token risultante:

{ "sub": "user-id-123", "email": "[email protected]", "roles": ["Dipendente"], "department": "Engineering", ...claim standard... }

Utilizzo nel backend:

// Nessuna chiamata API aggiuntiva — il dipartimento è già nel token const { department } = verifyToken(req.headers.authorization.slice(7)) console.log(department) // "Engineering"

Esempio 2: Badge Piano di Abbonamento

Requisito: Uno strumento di analytics di terze parti si aspetta un claim subscription_plan che indica il livello dell’utente.

Configurazione:

  • Claim Key: subscription_plan
  • Tipo: ROLE_BASED
  • Mapping:
    • Cliente Enterprise → enterprise
    • Cliente Pro → pro
    • Piano Gratuito → free
    • Default → free

Token risultante per un Cliente Enterprise:

{ "sub": "user-id-456", "roles": ["Cliente Enterprise", "Visualizzatore Fatture"], "subscription_plan": "enterprise", ... }

Esempio 3: Estrazione del Dominio Email

Requisito: Un backend multi-tenant instrada le richieste in base al dominio email dell’utente (azienda).

Configurazione:

  • Claim Key: email_domain
  • Tipo: EXPRESSION
  • Espressione: user.email.split('@')[1]

Token risultante:

{ "sub": "user-id-789", "email": "[email protected]", "email_domain": "contoso.com", ... }

Esempio 4: Ambiente Applicazione Statico

Requisito: Distinguere i token dall’applicazione di produzione rispetto a quella di staging.

Configurazione (sull’app di produzione):

  • Claim Key: env
  • Tipo: STATIC
  • Valore: production

Configurazione (sull’app di staging):

  • Claim Key: env
  • Tipo: STATIC
  • Valore: staging

Endpoint API

GET/api/applications/:id/custom-claimsRequires: view:applications

Elenca tutti i claim personalizzati configurati per un’applicazione, inclusi tipo, configurazione del valore e stato di attivazione.

POST/api/applications/:id/custom-claimsRequires: manage:applications

Crea un nuovo claim personalizzato. Corpo: { claimKey: string, valueType: 'STATIC' | 'USER_ATTRIBUTE' | 'ROLE_BASED' | 'EXPRESSION', staticValue?: string, userAttribute?: string, roleMapping?: Record<string, string>, expression?: string, isActive?: boolean }.

PATCH/api/applications/:id/custom-claims/:claimIdRequires: manage:applications

Aggiorna la configurazione o lo stato di attivazione di un claim personalizzato.

DELETE/api/applications/:id/custom-claims/:claimIdRequires: manage:applications

Elimina un claim personalizzato. I token emessi dopo l’eliminazione non conterranno il claim. I token emessi prima dell’eliminazione rimangono invariati fino alla loro scadenza.

POST/api/applications/:id/custom-claims/previewRequires: view:applications

Anteprima della risoluzione del claim per un utente specifico. Corpo: { userId: string }. Restituisce i valori del claim risolti come apparirebbero in un token per quell’utente.


Considerazioni sulla Dimensione del Token

Ogni claim personalizzato si aggiunge alla dimensione di ogni JWT access token emesso dall’applicazione. I token JWT vengono inviati come header HTTP su ogni richiesta autenticata. Mantieni i claim concisi:

ConsiderazioneIndicazione
Valori stringaMantieni sotto i 100 caratteri per claim
Evita oggetti metadata completiUsa metadata.{key} per estrarre campi specifici, non l’intero oggetto metadata
Numero di claimPunta a meno di 10 claim personalizzati per applicazione
Valori dei claim basati su ruoliUsa identificatori brevi (pro, free) non descrizioni complete

Token troppo grandi possono causare errori 431 Request Header Fields Too Large su alcuni proxy e load balancer (tipicamente con header superiori a 8KB).


Guide Correlate