Autenticazione tramite link magico
Impara a implementare link magici per l'accesso senza password, la registrazione su invito e gli inviti per i membri dell'organizzazione utilizzando token monouso.
Che cos'è un link magico?
Un link magico è un metodo di autenticazione senza password in cui un utente riceve un URL di accesso monouso tramite email (o SMS). Cliccando sul link, l'utente accede senza richiedere una password.
Ecco alcune funzionalità di sicurezza chiave dei link magici:
- Token monouso: Una volta cliccato, il token diventa invalido per prevenire il riutilizzo.
- Scadenza del link: Il link magico dovrebbe avere un breve tempo di scadenza (es. 10 minuti) per una maggiore sicurezza.
- Limitazione del tasso: Prevenire l'abuso limitando quanti link magici possono essere inviati in un determinato lasso di tempo.
- Associazione dispositivo/browser (Opzionale): Limitare l'uso del link al dispositivo o IP originale per prevenire intercettazioni.
Composizione di un link magico
Un link magico consiste in:
- Il percorso URL: Indica la pagina di destinazione della tua app.
- Token monouso: Un token unico e di consumo una tantum utilizzato per l'autenticazione senza password.
- Email utente: Utilizzata per validare l'autenticità del token e l'identità dell'utente.
- Parametri aggiuntivi: Opzionali, a seconda delle esigenze della tua app.
Ad esempio, un link magico potrebbe apparire così:
Per creare un link magico, devi generare un token monouso, inviarlo in modo sicuro all'utente e poi validarlo quando l'utente clicca sul link.
Flusso di lavoro di un link magico
- L'utente richiede un link magico: L'utente inserisce la propria email nella tua app.
- Generazione del token monouso: Il server genera un token e lo invia come link tramite email.
- L'utente clicca sul link: L'utente clicca sul link nell'email.
- Validazione del token: Il server verifica se il token è valido.
- L'utente è autenticato: Se il token è valido, l'utente viene autenticato.
Come implementare i link magici con Logto?
Passo 1: Richiedi un token monouso
Utilizza Logto Management API per creare un token monouso.
Esempio di payload del corpo richiesta:
Passo 2: Componi il tuo link magico
Dopo aver ottenuto il token monouso, puoi comporre un link magico e inviarlo all'indirizzo email dell'utente finale. Il link magico deve contenere almeno il token e l'email dell'utente come parametri e deve indirizzarsi a una pagina di atterraggio nella tua applicazione. Es. https://yourapp.com/landing-page
.
Ecco un semplice esempio di come potrebbe apparire il link magico:
Nota:
I nomi dei parametri nel link magico possono essere completamente personalizzati. Puoi aggiungere ulteriori informazioni al link magico in base alle esigenze della tua applicazione, oltre a codificare tutti i parametri URL.
Passo 3: Attiva il flusso di autenticazione tramite Logto SDK
Dopo che l'utente finale ha cliccato sul link magico ed è arrivato alla tua applicazione, puoi estrarre i parametri token
e email
dall'URL, e poi chiamare la funzione signIn()
dal Logto SDK per attivare il flusso di autenticazione.
Per ulteriori dettagli, consulta la Documentazione Logto - Link Magico (Token Monouso).
Casi d'uso del link magico
I link magici possono sostituire il primo passo dell'autenticazione, ma non possono bypassare la Multi-Factor Authentication (MFA).
In Logto, quando si genera un link magico con un token monouso, non è necessario specificare se è per l'accesso o per la registrazione. Determiniamo automaticamente il flusso in base allo stato di registrazione dell'email:
- Email non registrata: Cliccando sul link magico gli utenti vengono reindirizzati al flusso di creazione dell'account, saltando l'inserimento e la verifica dell'email. Gli utenti procedono a impostare una password, ad aggiungere dettagli del profilo (es. nome completo) o a impostare il MFA, in base alle impostazioni di registrazione.
- Email registrata: Cliccando sul link magico vengono bypassate le prime verifiche (es. "email + password" o "email + codice di verifica"). L'utente viene autenticato direttamente o viene invitato a completare il MFA, in base alle impostazioni di accesso.
Logto supporta i seguenti scenari con i link magici:
- Registrazione su invito: Per strumenti interni o prodotti AI in fase di test, puoi disattivare la registrazione pubblica e invitare utenti specifici tramite un link magico.
- Invito per membri dell'organizzazione: Per prodotti SaaS, usa i link magici per invitare nuovi membri in un'organizzazione, semplificando il processo di adesione.
- Accesso/Registrazione: Invia un link magico per accesso o registrazione tramite email.
Attualmente non supportato:
- Reset della password con link magico.
- Utilizzo del numero di telefono o del nome utente come identificatore.
Facci sapere se hai bisogno di ulteriori personalizzazioni.
Registrazione su invito con link magico
Per nuovi prodotti (es. strumenti AI) in test interno o per strumenti interni, potresti voler disabilitare la registrazione pubblica e consentire solo a utenti specifici di accedere alla tua app. Per implementare ciò con Logto:
-
Vai su Console > Esperienza di accesso > Accesso e registrazione > Opzioni avanzate e disattiva "Abilita registrazione utente" per chiudere la registrazione pubblica.
-
Raccogli gli indirizzi email degli utenti che desideri invitare (es. tramite il tuo sito web o consigli da parte di utenti esistenti).
-
Crea e invia il link di invito magico come descritto sopra (richiedi il token monouso, componi il link magico, attiva l'autenticazione tramite Logto SDK).
Nota: Imposta un tempo di scadenza per il link di invito. È consigliato rendere il link valido per almeno un giorno. Usa il seguente corpo richiesta per generare il token monouso:
-
Invia il link magico all'email dell'utente (es.
https://yourapp.com/landing-page?type=registrationInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]
). Personalizza il modello di email, come ad esempio:Quando gli utenti cliccano su "Accetta l'invito", si registreranno automaticamente al tuo servizio, anche con la registrazione pubblica disabilitata. Questo è definito "Invito mirato agli utenti".
Invito per membri dell'organizzazione con link magico
Per prodotti multi-tenant (es. app SaaS come Slack, GitHub, Vercel), fornisci un processo di invito ai membri senza soluzione di continuità per gestire le adesioni all'organizzazione. Usa i link magici per tassi di conversione più alti negli inviti ai membri.
-
Segui i Documenti Logto per implementare la creazione di organizzazioni, il controllo degli accessi basato sui ruoli e la gestione delle organizzazioni: Logto Organizations.
-
Imposta il flusso "Invita membri" nel tuo prodotto. Esempio:
-
Segui questa guida per Invitare Membri dell'Organizzazione. Nota: Quando inviti i membri, assicurati che il payload della richiesta includa:
context: jitOrganizationIds
per specificare a quale(i) organizzazione(i) l'utente si unirà.- Imposta un tempo di scadenza più lungo
expiresIn
(es. 2 giorni o 1 settimana) per consentire agli utenti di accettare l'invito.
Esempio di payload della richiesta:
-
Invia il link di invito all'email dell'utente (es.
https://yourapp.com/landing-page?type=organizationMemberInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]
). Personalizza il tuo modello di email, ad esempio:Quando gli utenti cliccano su "Accetta l'invito", verranno automaticamente autenticati o registrati e si uniranno automaticamente all'organizzazione.
Gestire conflitti di account
Cosa succede se un utente è già connesso e clicca su un altro link magico?
Per gestire correttamente i conflitti di account, assicurati quanto segue:
- Evita di aggiungere
login
nel prompt di accesso: Non impostare il prompt di accesso includendologin
. Se impostato in modo errato, Logto autenticherà automaticamente l'account associato al token del link magico, bypassando il prompt di cambio account. - Preserva i token esistenti: Quando chiami la funzione
signIn()
, specifica il parametroclearTokens: false
per evitare di cancellare i token esistenti. Se si utilizza questa opzione, assicurati di cancellare manualmente i token nella pagina di callback di accesso.
Dopo la corretta configurazione, l'esperienza utente sarà la seguente:
- Link magico per l'account corrente: Se l'utente è già autenticato e clicca su un link magico per lo stesso account, Logto verificherà il token monouso e, se necessario, assegnirà l'utente alle organizzazioni specificate.
- Link magico per un account diverso: Se l'utente è autenticato e clicca su un link magico per un account diverso, Logto inviterà l'utente a:
- Continuare come il nuovo account: Logto passa al nuovo account dopo la verifica del token.
- Rimanere con l'account corrente: Logto salta la verifica del token e restituisce l'utente all'account corrente.
Gestire le pagine di errore per il link magico invalidato
Quando gli utenti cliccano su un link magico non valido, verranno reindirizzati a una pagina di errore con una chiara spiegazione del problema. Di seguito sono riportati gli scenari di errore possibili e i loro messaggi:
Nome | Descrizione |
---|---|
token_not_found | Token attivo non trovato con l'email e il token forniti. |
email_mismatch | Discrepanza dell'email con il token fornito. |
token_expired | Il token è scaduto. |
token_consumed | Il token è stato consumato. |
token_revoked | Il token è stato revocato. |
cannot_reactivate_token | Impossibile riattivare il token. |
Ogni pagina di errore fornirà un messaggio specifico, aiutando gli utenti a capire la ragione dietro il link magico non valido e guidandoli nei passi successivi. Ad esempio:
Conclusione
Logto offre sicurezza a livello aziendale attraverso flussi di accesso senza password flessibili utilizzando link magici. È un modo semplice ma potente per creare esperienze utente fluide—che tu stia invitando utenti a unirsi a un'organizzazione, permettendo loro di creare account con facilità, o fornendo un'autenticazione senza problemi. E poiché Logto gestisce situazioni difficili come conflitti di account e token scaduti, i tuoi utenti ottengono un processo sicuro e privo di frustrazioni ogni volta.
Pronto a modernizzare il tuo IAM con un'autenticazione a prova di proiettile?