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 utiliser cela 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 Lier une identité sociale à un utilisateur.
Hachage des mots de passe
Logto utilise Argon2 pour le hachage des mots de passe des utilisateurs, 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 hachages de 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 trouverez la liste des algorithmes pris en charge dans la documentation crypto de Node.js. Dans ce cas, le passwordDigest
sera une chaîne JSON contenant l'algorithme de hachage et d'autres paramètres spécifiques à l'algorithme.
Format général Legacy
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');
Prise en charge de PBKDF2
Logto prend spécifiquement en charge PBKDF2.
Pour migrer des mots de passe hachés avec PBKDF2, définissez passwordAlgorithm
sur Legacy
et formatez le passwordDigest
comme suit :
["pbkdf2", ["salt", "1000", "20", "sha512", "@"], "expected_hashed_value"]
Les paramètres sont :
salt
: La valeur de sel utilisée dans le hachage d'origineiterations
: Nombre d'itérations (ex :"1000"
)keylen
: Longueur de la clé dérivée en octets (ex :"20"
)digest
: La fonction de hachage utilisée (ex :"sha512"
,"sha256"
,"sha1"
)@
: Espace réservé pour la valeur réelle du mot de passeexpected_hashed_value
: Le résultat de hachage attendu sous forme de chaîne hexadécimale
Exemple de charge utile de migration :
{
"username": "john_doe",
"primaryEmail": "john.doe@example.com",
"passwordAlgorithm": "Legacy",
"passwordDigest": "[\"pbkdf2\", [\"mySalt123\", \"1000\", \"20\", \"sha512\", \"@\"], \"c465f66c6ac481a7a17e9ed5b4e2e7e7288d892f12bf1c95c140901e9a70436e\"]"
}
É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 devez configurer un tenant dans Logto. Vous pouvez utiliser Logto Cloud ou Logto OSS. Si ce n'est pas encore 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 utilisateurs un par un, nous appellerons l’API créer un utilisateur 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 donc 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 une grande quantité de données utilisateur (plus de 100 000 utilisateurs), vous pouvez nous contacter pour augmenter la limite de débit.
Ressources associées
Un guide général pour migrer votre base de données utilisateur existante vers Logto