Skip to Content

Migrazione da Auth0

Auris offre parità di funzionalità con Auth0 in autenticazione, autorizzazione e gestione utenti, più funzionalità che Auth0 fa pagare a parte o non offre (FGA stile Zanzibar, provisioning SCIM integrato, Actions Engine con editor visuale, e deployment self-hosted). Questa guida illustra una migrazione completa da Auth0 ad Auris con downtime minimo.

Mappatura delle Funzionalità

Funzionalità Auth0Equivalente AurisNote
Universal LoginHosted Login PagesOAuth2 Authorization Code + PKCE, branded per tenant
Rules / ActionsActions EngineJavaScript sandboxed, 6 trigger point, editor visuale Blueprint
RBAC (Ruoli + Permessi)Roles & Permissions V2Tri-state ALLOW/DENY, scoping per applicazione
OrganizationsOrganizations B2BMulti-org con 4 ruoli membro, inviti basati su token
Auth0 FGA (OpenFGA)Auris FGAReBAC stile Zanzibar, DSL compatibile con OpenFGA
Social ConnectionsSocial Login9 provider (Google, GitHub, Microsoft, Apple, Facebook, Discord, LinkedIn, Twitter/X, Slack)
Enterprise Connections (SAML/OIDC)Enterprise SSOSAML 2.0 + OIDC tramite Keycloak IdP brokering, verifica dominio
Machine-to-MachineClient CredentialsGrant OAuth2 client_credentials, basato su scope, JWT con type: 'm2m'
Hooks / WebhooksWebhookFirmati HMAC-SHA256, retry con backoff esponenziale
Custom ClaimsCustom JWT ClaimsPer applicazione, 5 tipi di valore
MFAMulti-Factor AuthTOTP, SMS OTP, WebAuthn/Passkeys, MFA adattivo con risk scoring
Passwordless (Email)Magic LinksLogin email basato su token con auto-signup
Passwordless (SMS)SMS OTPProvider Twilio, rate-limited con cooldown
Attack ProtectionAttack ProtectionRegole IP, lockout brute-force, CAPTCHA, rilevamento login sospetti
Log StreamingLog StreamingWebhook, S3, Datadog, Splunk
User Import/ExportUser Import/ExportCSV e JSON, elaborazione asincrona con tracking del progresso
SCIMSCIM 2.0 ProvisioningConforme RFC 7644, mappatura attributi, operazioni bulk
Custom DomainsCustom DomainsPagine auth white-label, SSL automatico
Rate LimitingRate Limiting4 livelli, sliding window, header standard
BrandingBrandingLogo, colori, favicon, nome azienda

Passaggi della Migrazione

Passaggio 1: Esportare gli Utenti da Auth0

Usa l’Auth0 Management API per esportare i tuoi utenti:

# Crea un job di esportazione curl -X POST https://TUO_DOMINIO_AUTH0/api/v2/jobs/users-exports \ -H "Authorization: Bearer $AUTH0_MANAGEMENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "format": "json", "fields": [ { "name": "user_id" }, { "name": "email" }, { "name": "email_verified" }, { "name": "name" }, { "name": "given_name" }, { "name": "family_name" }, { "name": "created_at" }, { "name": "app_metadata" }, { "name": "user_metadata" } ] }'
# Controlla lo stato dell'esportazione curl https://TUO_DOMINIO_AUTH0/api/v2/jobs/JOB_ID \ -H "Authorization: Bearer $AUTH0_MANAGEMENT_TOKEN" # Quando lo stato è "completed", scarica il file dall'URL location

Auth0 non esporta gli hash delle password per gli utenti che si sono registrati con email/password. Questi utenti dovranno reimpostare la password dopo la migrazione, oppure puoi usare il pattern di migrazione lazy descritto di seguito.

Passaggio 2: Trasformare e Importare gli Utenti in Auris

Trasforma il formato di esportazione Auth0 nel formato di importazione Auris:

// transform-auth0-users.ts import fs from 'fs' interface Auth0User { user_id: string email: string email_verified: boolean name: string given_name: string family_name: string created_at: string app_metadata: Record<string, unknown> user_metadata: Record<string, unknown> } interface AurisImportUser { email: string firstName: string lastName: string emailVerified: boolean } const auth0Users: Auth0User[] = JSON.parse( fs.readFileSync('auth0-export.json', 'utf-8') ) const aurisUsers: AurisImportUser[] = auth0Users.map((user) => ({ email: user.email, firstName: user.given_name || user.name?.split(' ')[0] || '', lastName: user.family_name || user.name?.split(' ').slice(1).join(' ') || '', emailVerified: user.email_verified, })) fs.writeFileSync('auris-import.json', JSON.stringify(aurisUsers, null, 2)) console.log(`Trasformati ${aurisUsers.length} utenti`)

Carica su Auris:

curl -X POST https://auth.tuodominio.com/api/users/import \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: tuo-tenant-id" \ -F "[email protected]" \ -F "format=json"

Passaggio 3: Creare le Applicazioni nella Console Auris

Per ogni Applicazione Auth0, crea un’Applicazione corrispondente in Auris:

  1. Apri Console poi Applicazioni poi Crea Applicazione
  2. Imposta il Tipo Applicazione in modo che corrisponda al tipo Auth0:
    • Auth0 “Single Page Application” o “Regular Web Application” = Auris WEB
    • Auth0 “Native” = Auris MOBILE
    • Auth0 “Machine to Machine” = Auris M2M
  3. Configura gli URL di Callback Consentiti con gli stessi redirect URI di Auth0
  4. Configura le Origini Consentite con le stesse origini di Auth0
  5. Annota il nuovo Client ID (e il Client Secret per le app M2M)

Passaggio 4: Sostituire l’SDK Auth0 con l’SDK Auris

Installa l’SDK Auris e rimuovi l’SDK Auth0:

# Rimuovi Auth0 npm uninstall @auth0/auth0-spa-js @auth0/auth0-react @auth0/nextjs-auth0 # Installa Auris npm install @auris/js @auris/react # Per Next.js: npm install @auris/nextjs

Passaggio 5: Aggiornare il Codice dell’Applicazione

L’API dell’SDK Auris è intenzionalmente simile a quella di Auth0 per minimizzare lo sforzo di migrazione.

Setup Provider (React):

// PRIMA (Auth0) import { Auth0Provider } from '@auth0/auth0-react' function App() { return ( <Auth0Provider domain="tuo-tenant.auth0.com" clientId="auth0-client-id" authorizationParams={{ redirect_uri: window.location.origin + '/callback', }} > <MyApp /> </Auth0Provider> ) } // DOPO (Auris) import { AurisProvider } from '@auris/react' function App() { return ( <AurisProvider domain="auth.tuazienda.com" clientId="auris-client-id" redirectUri={window.location.origin + '/callback'} > <MyApp /> </AurisProvider> ) }

Hook di Autenticazione:

// PRIMA (Auth0) const { loginWithRedirect, logout, user, isAuthenticated, isLoading, getAccessTokenSilently } = useAuth0() // DOPO (Auris) const { loginWithRedirect, logout, user, isAuthenticated, isLoading, getAccessToken } = useAuris() // Il logout è leggermente diverso: // Auth0: logout({ logoutParams: { returnTo: window.location.origin } }) // Auris: logout({ returnTo: window.location.origin })

Chiamate API con Access Token:

// PRIMA (Auth0) const token = await getAccessTokenSilently() // DOPO (Auris) const token = await getAccessToken() // Il resto del codice API rimane invariato const response = await fetch('/api/protected', { headers: { Authorization: `Bearer ${token}` }, })

Controllo Permessi (React):

// PRIMA (Auth0 — controllo manuale del claim) const { user } = useAuth0() const hasPermission = user?.['https://myapp.com/permissions']?.includes('read:data') // DOPO (Auris — hook permessi integrato) import { useCheckPermission } from '@auris/react' const canReadData = useCheckPermission('read:data')

Middleware Next.js:

// PRIMA (Auth0) import { withMiddlewareAuthRequired } from '@auth0/nextjs-auth0/edge' export default withMiddlewareAuthRequired() // DOPO (Auris) import { aurisMiddleware } from '@auris/nextjs/middleware' export default aurisMiddleware({ protectedPaths: ['/dashboard(.*)'], publicPaths: ['/', '/about', '/pricing'], loginUrl: '/auth/login', })

Passaggio 6: Aggiornare i Redirect URI

Aggiorna i Callback URL nell’applicazione Auris per corrispondere a ciò che la tua app invia:

  • Sostituisci https://tuo-tenant.auth0.com/ con https://auth.tuazienda.com/ in tutti i redirect URI

Passaggio 7: Migrare le Rules verso le Actions

Le Rules e Actions di Auth0 si mappano ai trigger dell’Actions Engine di Auris:

Trigger Auth0Trigger Auris
post-loginpost-login
pre-user-registrationpre-signup
post-user-registrationpost-signup
post-change-passwordpost-change-password

Esempio di Action Auth0:

// Auth0 Action (post-login) exports.onExecutePostLogin = async (event, api) => { if (!event.user.email_verified) { api.access.deny('Verifica la tua email prima di accedere.') } api.idToken.setCustomClaim('https://myapp.com/role', event.user.app_metadata.role) }

Equivalente Auris Action:

// Auris Action (trigger post-login) async function action(context) { if (!context.user.emailVerified) { return { deny: true, message: 'Verifica la tua email prima di accedere.' } } return { claims: { role: context.user.metadata?.role || 'user' } } }

Passaggio 8: Migrare l’RBAC

Esporta ruoli e permessi da Auth0 e ricreali in Auris:

# Elenca i ruoli Auth0 curl https://TUO_DOMINIO_AUTH0/api/v2/roles \ -H "Authorization: Bearer $AUTH0_MANAGEMENT_TOKEN"

Per ogni ruolo, crealo in Auris:

curl -X POST https://auth.tuodominio.com/api/roles \ -H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \ -H "x-tenant: tuo-tenant-id" \ -H "Content-Type: application/json" \ -d '{ "name": "Editor", "description": "Può modificare i contenuti", "color": "#3B82F6" }'

Auris supporta permessi tri-state (ALLOW/DENY) che è più granulare del modello binario di Auth0.

Passaggio 9: DNS Cutover

Una volta testato tutto:

  1. Configura un dominio personalizzato in Auris (es. auth.tuazienda.com)
  2. Aggiorna il DNS per puntare il tuo dominio di autenticazione ad Auris
  3. Aggiorna tutte le applicazioni per usare il nuovo dominio
  4. Monitora i log di audit Auris per le prime ore dopo il cutover

Gestione delle Password (Migrazione Lazy)

Poiché Auth0 non esporta gli hash delle password, hai due opzioni:

Opzione A: Forza il Reset della Password (Più Semplice)

Dopo aver importato gli utenti, attiva un’email di reset password in blocco:

  1. Tutti gli utenti importati ricevono un’email “Imposta la tua password”
  2. Gli utenti cliccano il link e impostano una nuova password su Auris
  3. Non sono richieste modifiche al codice dell’applicazione

Opzione B: Migrazione Lazy (Zero Friction)

Esegui Auth0 e Auris in parallelo temporaneamente. Quando un utente effettua il login:

  1. Auris tenta di autenticare l’utente
  2. Se l’utente non ha password in Auris (importato senza), Auris restituisce un errore specifico
  3. La tua applicazione intercetta questo errore e tenta l’autenticazione su Auth0 come fallback
  4. Se Auth0 ha successo, la tua applicazione crea la password in Auris tramite l’Admin API
  5. I login successivi vanno direttamente tramite Auris

Questo approccio migra le password in modo trasparente man mano che gli utenti effettuano il login, con zero friction.

Il pattern di migrazione lazy richiede di mantenere attivo il tenant Auth0 durante il periodo di migrazione. Pianifica la sua disattivazione dopo un periodo ragionevole (es. 30-90 giorni) quando la maggior parte degli utenti attivi ha migrato.

Piano di Rollback

In caso di problemi durante la migrazione:

  1. Mantieni Auth0 attivo per almeno 30 giorni dopo il cutover
  2. Rollback DNS: Reindirizza il tuo dominio di autenticazione ad Auth0
  3. Rollback SDK: Ripristina i pacchetti @auris/* con @auth0/* nel codice e rideploya
  4. Nessuna perdita di dati: Gli utenti creati in Auris durante la migrazione possono essere esportati e reimportati in Auth0

Checklist Post-Migrazione

Dopo aver completato la migrazione, verifica:

  • Tutti gli utenti riescono ad accedere (testa con più account)
  • I provider di login social funzionano (Google, GitHub, ecc.)
  • L’iscrizione e la verifica MFA funzionano
  • Il controllo degli accessi basato sui ruoli è applicato correttamente
  • I webhook consegnano eventi ai tuoi endpoint
  • Il log streaming è attivo (se configurato)
  • I domini personalizzati e SSL funzionano
  • Le app mobile (se presenti) sono aggiornate con il nuovo SDK
  • Le applicazioni M2M riescono a ottenere token
  • Il provisioning SCIM è connesso (se usato)

Guide Correlate