Migration des utilisateurs
Logto prend en charge la migration manuelle des utilisateurs existants depuis une autre plateforme. Ce guide vous montrera comment importer des utilisateurs existants via Management API et abordera les points à considérer avant la migration.
Schéma utilisateur
Avant de commencer, examinons le schéma utilisateur dans Logto. Il y a 3 parties du schéma utilisateur dont vous devez être conscient :
- Données de base : il s'agit des informations de base du profil utilisateur, vous pouvez faire correspondre les données de votre profil utilisateur existant.
- Données personnalisées : stocke des informations utilisateur supplémentaires, vous pouvez l'utiliser pour stocker des fichiers qui ne correspondent pas aux données de base.
- Identités sociales : stocke les informations utilisateur récupérées lors de la connexion sociale.
Vous pouvez créer une correspondance pour faire le lien entre les informations de votre profil utilisateur existant et les données de base et données personnalisées. Pour la connexion sociale, des étapes supplémentaires sont nécessaires pour importer les identités sociales ; veuillez vous référer à l’API de Lier une identité sociale à un utilisateur.
Hachage des mots de passe
Logto utilise Argon2 pour hacher le mot de passe de l'utilisateur, et prend également en charge d'autres algorithmes comme MD5
, SHA1
, SHA256
et Bcrypt
pour faciliter la migration. Ces algorithmes sont considérés comme non sécurisés, les mots de passe correspondants seront migrés vers Argon2 lors de la première connexion réussie de l'utilisateur.
Si vous utilisez d'autres algorithmes de hachage ou du sel, vous pouvez définir passwordAlgorithm
sur Legacy
, ce qui vous permet d'utiliser n'importe quel algorithme de hachage pris en charge par Node.js. Vous pouvez trouver la liste des algorithmes pris en charge dans la documentation Node.js crypto. Dans ce cas, le passwordDigest
sera une chaîne JSON contenant l'algorithme de hachage et d'autres paramètres spécifiques à l'algorithme.
Le format de la chaîne JSON est le suivant :
["hash_algorithm", ["argument1", "argument2", ...], "expected_hashed_value"]
Et vous pouvez utiliser @
comme espace réservé pour la valeur réelle du mot de passe dans les arguments.
Par exemple, si vous utilisez SHA256 avec un sel, vous pouvez stocker le mot de passe au format suivant :
["sha256", ["salt123", "@"], "c465f66c6ac481a7a17e9ed5b4e2e7e7288d892f12bf1c95c140901e9a70436e"]
Ce qui équivaut au code suivant :
const hash = crypto.createHash('sha256');
hash.update('salt123' + 'password123');
const expectedHashedValue = hash.digest('hex');
Étapes de migration
-
Préparer les données utilisateur
Vous devez d'abord exporter les données utilisateur de votre plateforme existante, puis faire correspondre les informations utilisateur au schéma utilisateur Logto. Nous vous recommandons de préparer les données mappées au format JSON. Voici un exemple de données utilisateur :[
{
"username": "user1",
"passwordDigest": "password-encrypted",
"passwordAlgorithm": "SHA256"
},
{
"username": "user2",
"passwordDigest": "password-encrypted",
"passwordAlgorithm": "SHA256"
}
] -
Créer un tenant Logto
Vous devrez configurer un tenant dans Logto. Vous pouvez utiliser Logto Cloud ou Logto OSS. Si ce n'est pas déjà fait, veuillez consulter le guide Configurer Logto cloud. -
Configurer la connexion à Management API
Nous utiliserons Management API pour importer les données utilisateur. Vous pouvez consulter la page Management API pour apprendre à configurer la connexion dans votre environnement de développement. -
Importer les données utilisateur
Il est recommandé de préparer un script pour importer les données utilisateur une par une. Nous appellerons l’API create user pour importer les données utilisateur. Voici un exemple de script :const users = require('./users.json');
const importUsers = async () => {
for (const user of users) {
try {
await fetch('https://[tenant_id].logto.app/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer [your-access-token]',
},
body: JSON.stringify(user),
});
// Sleep for a while to avoid rate limit
await new Promise((resolve) => setTimeout(resolve, 200));
} catch (error) {
console.error(`Failed to import user ${user.username}: ${error.message}`);
}
}
};
importUsers();
Veuillez noter que le point d’API est soumis à une limitation de débit ; vous devez ajouter une pause entre chaque requête pour éviter d’atteindre la limite. Veuillez consulter notre page sur les limitations de débit pour plus de détails.
Si vous avez un grand volume de données utilisateur (plus de 100 000 utilisateurs), vous pouvez nous contacter pour augmenter la limite de débit.
Ressources associées
Guide général pour migrer votre base de données utilisateur existante vers Logto