Skip to Content

Hosted Login (Universal Login)

Il Problema: Dove Deve Vivere il Form di Login?

Ogni applicazione che autentica gli utenti deve decidere dove vive il form di login. Ci sono tre approcci fondamentali e la scelta ha profonde implicazioni di sicurezza.

Login Incorporato (l’approccio rischioso)

L’applicazione rende il proprio form di login e raccoglie le credenziali direttamente. Il problema: il codice JavaScript della tua applicazione può leggere il form di login, intercettare i tasti premuti e accedere alle credenziali.

Login Hosted (l’approccio sicuro)

Le credenziali vengono inserite su una origin diversa — quella controllata dall’identity provider. Il JavaScript della tua applicazione non può leggere i campi del form, intercettare i tasti premuti o accedere alle credenziali in alcun modo. La policy same-origin del browser applica questo confine automaticamente.

RischioLogin IncorporatoLogin Hosted
XSS ruba le credenzialiSì — il tuo JS può leggere il campo passwordNo — origin diversa, il tuo JS non può accedervi
Script di terze parti legge le credenzialiSìNo — gli script di terze parti sulla tua origin non possono raggiungere la pagina auth
Phishing delle credenziali tramite manipolazione DOMSìNo — la pagina di login è sul dominio dell’IdP
Enforcement MFADevi implementarloL’IdP lo gestisce in modo trasparente
Ambito dell’audit di conformitàL’intera tua applicazioneSolo le pagine di login dell’IdP

Il Hosted Login è l’approccio raccomandato dall’OAuth 2.0 Security Best Current Practice (RFC 6819). Auth0 lo chiama “Universal Login,” Okta lo chiama “Okta-hosted Sign-In,” e Auris lo chiama “Hosted Login.” Il principio di sicurezza è lo stesso: non lasciare mai che la tua applicazione tocchi le credenziali grezze.

Come Funziona: Il Flusso Completo

Auris Hosted Login implementa il flusso OAuth2 Authorization Code con PKCE (RFC 7636). Il flusso:

  1. La tua app genera un code verifier e un code challenge PKCE
  2. Il browser viene reindirizzato all’endpoint /api/oauth/authorize di Auris con il code challenge
  3. Auris crea una OAuthSession per tracciare il progresso
  4. L’utente viene reindirizzato alla pagina di login hosted di Auris
  5. L’utente inserisce le credenziali (email/password, magic link, social, ecc.)
  6. Se richiesto, viene presentata la schermata MFA
  7. Auris emette un authorization code monouso (5 minuti)
  8. Il browser viene reindirizzato al redirect_uri della tua app con il codice
  9. La tua app valida lo state (protezione CSRF) e scambia il codice per token
  10. Auris verifica il code challenge PKCE ed emette i token

PKCE S256: Perché È Importante

PKCE (Proof Key for Code Exchange) previene gli attacchi di intercettazione dell’authorization code.

Se un attaccante intercetta l’authorization code nell’URL di redirect, non può scambiarlo. Per scambiare il codice, ha bisogno del code_verifier — che non è mai stato trasmesso attraverso la barra URL del browser. Era archiviato nella memoria del client e inviato direttamente all’endpoint token tramite HTTPS.

Auris applica PKCE S256 a tutti i flussi authorization code. Il metodo di challenge plain viene rifiutato. Non esiste configurazione per disabilitare PKCE — è sempre richiesto.

Gestione delle Sessioni

Auris usa due modelli lato server per gestire il flusso hosted login:

OAuthSession

Creata quando l’utente arriva all’endpoint authorize. Archiviata nel database e identificata da un cookie httpOnly.

CampoDescrizione
sessionTokenIdentificatore univoco (impostato come cookie httpOnly, Secure, SameSite=Lax)
clientIdL’applicazione che richiede l’autenticazione
redirectUriDove reindirizzare dopo l’autenticazione
codeChallengeCode challenge PKCE (S256)
stateValore state CSRF dal client
scopeScope OAuth richiesti
TTL30 minuti (la sessione scade se l’utente non completa il login)

AuthorizationCode

Creato dopo l’autenticazione riuscita.

CampoDescrizione
codeAuthorization code univoco
clientIdDeve corrispondere al client_id della richiesta token
redirectUriDeve corrispondere esattamente al redirect_uri della richiesta token
codeChallengeArchiviato per la verifica PKCE allo scambio token
TTL5 minuti
usedAtImpostato atomicamente al primo utilizzo (enforcement monouso)

Pipeline di Sicurezza al Login

Ogni tentativo di login passa attraverso una pipeline di controlli di sicurezza in questa sequenza:

  1. Rate limiting: Limite di 10 tentativi per IP ogni 15 minuti
  2. Account bloccato: Se l’account è bloccato, rifiuta immediatamente
  3. Verifica credenziali: Email + password controllata in Keycloak
  4. Rilevamento accessi sospetti: IP/paese sconosciuto, nuovo dispositivo, ora insolita
  5. Risk scoring adattivo: Punteggio da 0 a 100 basato su segnali comportamentali
  6. Valutazione policy MFA: Trigger MFA se richiesto dalla policy o dallo score di rischio
  7. Actions Engine: Hook personalizzati pre_login e post_login
  8. Emissione token: Generazione access token, refresh token e ID token

Protezione Brute Force

MetricaSogliaAzione
Tentativi di login10 in 15 min (per IP)Blocco temporaneo 15 min
Tentativi falliti5 consecutivi (per utente)Blocco account, email di notifica
Traffico anomaloRilevato dall’analisi IPRate limiting adattivo

Domini Personalizzati

Quando è configurato un dominio personalizzato, la pagina di login hosted viene servita da quel dominio. La pipeline di sicurezza è identica. I certificati SSL vengono gestiti automaticamente tramite Let’s Encrypt.

Pagine di Login Branded

La pagina di login hosted riflette automaticamente:

  • Il logo caricato nelle impostazioni branding
  • Il colore primario del brand
  • Il nome dell’organizzazione
  • I provider di login social configurati

Implementazione con l’SDK

import { AurisClient } from '@auris/js' const auris = new AurisClient({ domain: 'api.altovar.net', clientId: 'il-tuo-client-id', redirectUri: 'https://app.tuodominio.com/callback', }) // Avvia il login await auris.loginWithRedirect() // Gestisci il callback const { user } = await auris.handleRedirectCallback()

L’SDK gestisce automaticamente la generazione PKCE, l’archiviazione, la validazione dello state e lo scambio del codice.

Concetti Correlati