L'autenticazione è il processo di verifica dell'identità dell'utente. Nelle app, è la porta d'accesso all'esperienza. L'autenticazione implementata in modo inadeguato compromette la sicurezza e frustra gli utenti. Questa guida presenta metodi, protocolli e best practice per implementare un'autenticazione sicura e intuitiva.
Cos'è l'autenticazione
L'autenticazione risponde alla domanda: "Chi sei?" È diverso dall'autorizzazione, che risponde: "Cosa puoi fare?" L'utente dimostra la propria identità, solitamente con qualcosa che conosce (password), qualcosa che ha (telefono) o qualcosa che è (dati biometrici).
Importanza dell'autenticazione
Senza un'adeguata autenticazione, chiunque può accedere ai dati privati. Sono possibili fughe di notizie, frodi e abusi. Sono in gioco la reputazione del prodotto e la fiducia degli utenti.
Metodi di autenticazione
Nome utente e password
Metodo tradizionale. Semplice da implementare, ma vulnerabile agli attacchi se le password sono deboli o archiviate in modo errato.
Accesso social
Accedi tramite Google, Apple, Facebook. Veloce per l'utente, delega la sicurezza a fornitori fidati. Riduce l'attrito nella registrazione.
Collegamento magico
Link inviato via email che autentica quando viene cliccato. Elimina la password, ma dipende dall'accesso alla posta elettronica.
OTP (password monouso)
Codice inviato tramite SMS o e-mail. Valido per un breve periodo. Comune come secondo fattore.
Biometria
Impronta digitale, ID viso. Massima comodità sui dispositivi che lo supportano. Spazio di archiviazione locale, non condiviso.
Chiavi di accesso
Nuovo standard che elimina le password. Utilizza la crittografia a chiave pubblica. Apple, Google e Microsoft lo supportano.
Protocolli e standard
OAuth 2.0
Predefinito per l'autorizzazione delegata. Consente alle app di accedere alle risorse senza ricevere una password. Base di accesso social.
OpenID Connetti
Livello di identità su OAuth 2.0. Aggiunge l'autenticazione al flusso di autorizzazione.
SAML
Standard aziendale per SSO. Basato su XML. Comune negli ambienti aziendali.
JWT (token Web JSON)
Token che porta rivendicazioni firmate. Stateless, verificabile dal server senza consultare il database.
Flusso di autenticazione tipico
- L'utente fornisce le credenziali.
- Il server convalida e genera il token.
- Il token è memorizzato sul dispositivo.
- Le richieste includono il token nell'intestazione.
- Il server convalida il token e autorizza l'accesso.
Token: accesso e aggiornamento
Token di accesso
Token di breve durata per l'accesso alle API. Scade rapidamente (da minuti a ore).
Aggiorna token
Token di lunga durata per ottenere nuovi token di accesso. Conservato in modo sicuro. Consente lunghe sessioni senza riautenticazione.
Rotazione dei gettoni
Il token di aggiornamento genera un nuovo token di aggiornamento ad ogni utilizzo. Se uno è compromesso, verrà invalidato alla rotazione successiva.
Archiviazione sicura
Portachiavi iOS
API nativa per l'archiviazione di dati sensibili. Crittografato dal sistema. Utilizzare per token e credenziali.
Archivio chiavi Android
Simile a Portachiavi. Memorizza le chiavi crittografiche con protezione hardware quando disponibile.
Preferenze condivise crittografate
Per Android, alternativa più semplice. Crittografa i dati in SharedPreferences.
Mai in testo normale
Non archiviare i token in file, log o codice locali. Gli aggressori possono facilmente estrarlo.
Autenticazione a più fattori (MFA)
Di cosa si tratta
Richiede più fattori per l'autenticazione. Qualcosa che conosci + qualcosa che hai, per esempio.
Perché usarlo
Anche se la password viene compromessa, l’aggressore ha bisogno del secondo fattore. Aumenta significativamente la sicurezza.
Implementazioni comuni
- SMS OTP (meno sicuro, vulnerabile allo scambio SIM).
- TOTP tramite app di autenticazione (Google Authenticator, Authy).
- Notifica push per approvare l'accesso.
- La biometria come secondo fattore.
Sicurezza dell'accesso
Limitazione della velocità
Limita i tentativi di accesso. Previene la forza bruta.
Blocco dell'account
Blocca l'account dopo più errori. Si combina con la limitazione della velocità.
CAPTCHA
Differenzia gli esseri umani dai robot. Aggiunge attrito, usare con parsimonia.
Rilevamento anomalie
Identifica accessi sospetti: nuova posizione, nuovo dispositivo, orario insolito. Richiedi ulteriore verifica.
Esperienza utente
Riduci al minimo l'attrito
Più passi, più abbandono. L'accesso social e la biometria riducono gli attriti.
Ricordalo all'utente
Le sessioni lunghe impediscono la riautenticazione frequente. Utilizza i token di aggiornamento.
Cancella feedback
Messaggi di errore specifici (entro motivi di sicurezza). "E-mail o password errate" è migliore di "Errore di autenticazione".
Recupero dell'account
Cancella flusso per la reimpostazione della password. E-mail, SMS o domande di sicurezza.
Accesso social: pro e contro
Vantaggi
- Registrazione rapida, meno campi.
- L'utente non crea più una password.
- I fornitori si prendono cura della sicurezza.
Svantaggi
- Dipendenza da terzi.
- L'utente potrebbe avere problemi di privacy.
- Se il provider non funziona, l'accesso non sarà più disponibile.
Buone pratiche
Opzioni di offerta: sociale + tradizionale. Consenti il collegamento di più metodi. Non forzare l'accesso social.
Accedi con Apple
Obbligatorio
Se l'app offre l'accesso social, Apple richiede che offra Accedi con Apple. Regola dell'App Store.
Nascondi la mia email
L'utente può nascondere la posta elettronica reale. L'app riceve l'indirizzo di inoltro da Apple.
Implementazione
Utilizzare il framework AuthenticationServices. Flusso simile a OAuth.
Chiavi d'accesso: il futuro
Come funzionano
Coppia di chiavi pubblica/privata. La chiave privata rimane sul dispositivo e non viene mai trasmessa. Autenticazione tramite sfida crittografica.
Vantaggi
- Resistente al phishing.
- Non esiste alcuna password da perdere.
- Sincronizzazione tra i dispositivi dell'utente.
Adozione
Apple, Google e Microsoft lo supportano. Norma FIDO2/WebAuthn. Adozione in crescita.
Sessione e disconnessione
Gestione delle sessioni
Tieni traccia delle sessioni attive. Consentire all'utente di visualizzare e revocare.
Disconnessione sicura
Invalidare i token sul server. Cancella i dati sensibili dal dispositivo.
Timeout di inattività
Disconnettersi dopo un periodo di non utilizzo. Bilancia sicurezza e comodità.
Errori comuni
Password in testo semplice
Non archiviare mai le password senza hashing. Usa bcrypt, scrypt o Argon2.
Nessun token di scadenza
I gettoni eterni sono un rischio. Imposta sempre la scadenza.
Convalida solo client
Tutta la convalida deve avvenire sul server. Il cliente può essere manipolato.
Messaggi di errore rivelatori
"L'utente non esiste" e "E-mail non registrata" rivelano informazioni. Sii generico.
Conclusione
L'autenticazione sicura bilancia la protezione e l'esperienza dell'utente. Utilizza protocolli consolidati, implementa l'MFA, archivia correttamente i token e riduci al minimo gli attriti. Le passkey rappresentano il futuro, ma le password continuano a dettare legge. Costruisci per la realtà di oggi mentre ti prepari all'evoluzione.
##Domande frequenti
1) JWT è sicuro? Sì, se implementato correttamente. Utilizza HTTPS, convalida l'abbonamento, imposta una scadenza breve.
2) Dovrei offrire l'accesso via SMS? Come secondo fattore, è meglio di niente. Ma l'autenticatore TOTP è più sicuro degli SMS.
3) L'accesso con Apple è obbligatorio? Se offri un accesso social, sì. È la regola dell'App Store.
4) Quanto dovrebbe durare un token di accesso? Dipende dal contesto. 15-60 minuti è comune. I token di aggiornamento rinnovano la sessione.
5) I dati biometrici sono sicuri per l'autenticazione? Sì. I dati biometrici rimangono sul dispositivo e non vengono mai trasmessi. È comodità e sicurezza.
Leggi anche
- Autenticazione nelle applicazioni - Migliori pratiche con lista di controllo
- Accesso social nelle applicazioni: implementazione e migliori pratiche
- Accesso social in pratica: il percorso decisionale prima di implementarlo nella tua app
- Sicurezza delle applicazioni: Guida alla protezione mobile
- Autenticazione nelle applicazioni - Migliori pratiche con esempi
- Sviluppo nativo per Android: guida completa con Kotlin
