Aller au contenu principal

Lien magique (Jeton à usage unique)

Cloud availabilityOSS availability

Similaire au mot de passe à usage unique (OTP), un jeton à usage unique est une autre méthode d'authentification sans mot de passe qui peut être utilisée pour vérifier l'identité d'un utilisateur. Le jeton est valide pour une période limitée et est associé à une adresse e-mail de l'utilisateur final.

Parfois, vous pouvez vouloir inviter de nouveaux utilisateurs à votre application / organisation sans leur demander de créer un compte au préalable. Ou vous pouvez oublier votre mot de passe et vouloir vous connecter / réinitialiser votre mot de passe en vérifiant rapidement votre identité par e-mail. Dans de tels cas, l'application peut envoyer un "lien magique" à votre e-mail. Et vous serez authentifié immédiatement lorsque vous cliquerez sur le lien.

Les développeurs d'applications peuvent utiliser le jeton à usage unique pour composer un lien magique et l'envoyer à l'adresse e-mail de l'utilisateur final.

Flux de jeton à usage unique

Voici le diagramme de séquence du flux d'authentification utilisant un jeton à usage unique :

Guide de mise en œuvre

Logto offre un ensemble d'APIs de gestion et d'APIs d'expérience pour faciliter la mise en œuvre de votre lien magique.

Avant de commencer, assurez-vous d'avoir une instance Logto prête et d'avoir établi la connexion Machine-à-Machine entre votre serveur d'application et le point de terminaison Logto (nécessaire pour les APIs de gestion). En savoir plus sur Logto Management API.

Étape 1 : Demander un jeton à usage unique

Utilisez Logto Management API pour créer un jeton à usage unique.

POST /api/one-time-tokens

Exemple de charge utile du corps de la requête :

{
"email": "user@example.com",
// Optionnel. Par défaut à 600 (10 minutes).
"expiresIn": 3600,
// Optionnel. L'utilisateur sera provisionné aux organisations spécifiées après vérification réussie.
"context": {
"jitOrganizationIds": ["abcdefgh1234"]
}
}

Après avoir obtenu le jeton à usage unique, vous pouvez composer un lien magique et l'envoyer à l'adresse e-mail de l'utilisateur final. Le lien magique doit au moins contenir le jeton et l'e-mail de l'utilisateur en tant que paramètres, et doit diriger vers une page d'accueil dans votre propre application. Par exemple, https://yourapp.com/landing-page.

Voici un exemple simple de ce à quoi le lien magique peut ressembler :

https://yourapp.com/landing-page?token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&email=user@example.com
remarque:

Les noms des paramètres dans le lien magique peuvent être entièrement personnalisés. Vous pouvez ajouter des informations supplémentaires au lien magique en fonction des exigences de votre application, ainsi qu'encoder tous les paramètres URL.

Étape 3 : Déclencher le flux d'authentification via Logto SDK

Après que l'utilisateur final ait cliqué sur le lien magique et navigué vers votre application, vous pouvez extraire les paramètres token et email de l'URL, puis appeler la fonction signIn() de Logto SDK pour déclencher le flux d'authentification.

TokenLandingPage.tsx
// Exemple React
import { useLogto } from '@logto/react';
import { useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';

const TokenLandingPage = () => {
const { signIn } = useLogto();
const [searchParams] = useSearchParams();

useEffect(() => {
// Extraire le jeton et l'e-mail du lien magique
const oneTimeToken = searchParams.get('token');
const email = searchParams.get('email');

// Supposons que ceci est votre URI de redirection de connexion
const redirectUri = 'https://yourapp.com/callback';

if (oneTimeToken && email) {
signIn({
redirectUri,
clearTokens: false, // Optionnel. Voir le message d'avertissement ci-dessous
extraParams: {
'one_time_token': oneTimeToken,
'login_hint': email,
},
});
}
}, [searchParams, signIn]);

return <>Veuillez patienter...</>;
};
attention:

Si un utilisateur est déjà connecté, appeler la fonction signIn() du SDK effacera automatiquement tous les jetons mis en cache (jeton d’identifiant, jeton d’accès et jeton de rafraîchissement) du stockage client, ce qui entraînera la perte du statut d'authentification de l'utilisateur actuel.

Par conséquent, vous devez spécifier un paramètre de connexion supplémentaire clearTokens: false pour éviter d'effacer les jetons existants. Si cela est spécifié, vous devrez également effacer manuellement les jetons dans la page de rappel de connexion.

Ignorez cela si vos liens magiques ne sont pas conçus pour les utilisateurs authentifiés.

Étape 4 : (Optionnel) Effacer les jetons mis en cache dans la page de rappel de connexion

Si vous spécifiez clearTokens: false dans la fonction de connexion, vous devez effacer manuellement les jetons dans la page de rappel de connexion.

Callback.tsx
// Exemple React
import { useHandleSignInCallback, useLogto } from '@logto/react';
import { useEffect } from 'react';

const Callback = () => {
const { clearAllTokens } = useLogto();

useEffect(() => {
void clearAllTokens();
}, [clearAllTokens]);

useHandleSignInCallback(() => {
// Naviguer vers votre page d'accueil
});

return <>Veuillez patienter...</>;
};

FAQs

Oui, vous pouvez utiliser le lien magique pour inviter de nouveaux utilisateurs à votre application, ainsi qu'à des organisations. Si vous souhaitez inviter de nouveaux utilisateurs à votre organisation, spécifiez simplement les jitOrganizationIds dans le corps de la requête.

L'utilisateur rejoindra automatiquement les organisations après vérification réussie, et les rôles d'organisation par défaut seront attribués. Consultez la section "Approvisionnement Just-in-Time" dans la page des détails de votre organisation et configurez les rôles par défaut pour vos organisations.

Le jeton à usage unique expire-t-il ?

Oui, le jeton à usage unique expirera après le temps expiresIn spécifié (en secondes). Le temps d'expiration par défaut est de 10 minutes.

Oui, vous pouvez toujours utiliser le lien magique pour inviter des utilisateurs même si vous désactivez l'enregistrement des utilisateurs dans "Expérience de connexion".

Il existe plusieurs scénarios possibles :

  1. L'utilisateur est déjà connecté, puis clique sur un lien magique associé au compte utilisateur actuel. Dans ce cas, Logto vérifiera toujours le jeton à usage unique et provisionnera l'utilisateur aux organisations spécifiées si nécessaire.
  2. L'utilisateur est déjà connecté, puis clique sur un lien magique associé à un compte différent. Dans ce cas, Logto demandera à l'utilisateur de continuer avec le nouveau compte ou de revenir à l'application avec le compte actuel.
    1. Si l'utilisateur choisit de continuer avec le nouveau compte, Logto passera au nouveau compte après la vérification réussie du jeton.
    2. Si l'utilisateur choisit de rester avec le compte actuel, Logto ne vérifiera pas le jeton et retournera à l'application avec le compte actuel.
  3. Si votre invite de connexion est définie sur "login" ou contient "login", Logto connectera automatiquement le compte associé au jeton à usage unique sans demander de changement.