Importer de nombreux utilisateurs
Utilisez le FoxIDs Seed Tool pour charger les utilisateurs d’un fichier CSV dans un environnement FoxIDs comme utilisateurs internes. Chaque utilisateur peut être chargé avec :
- Aucun mot de passe, pour une connexion sans mot de passe avec un code à usage unique par e-mail ou SMS.
- Aucun mot de passe et l’obligation d’en choisir un à la première connexion, confirmée par e-mail ou SMS.
- Un mot de passe connu en clair, que le Seed Tool hache par défaut avant le chargement.
- Un hachage de mot de passe FoxIDs précalculé et son sel séparé.
- Un hachage de mot de passe Auth0 bcrypt, permettant à l’utilisateur de conserver son mot de passe existant.
La Control API accepte jusqu’à 1 000 utilisateurs par requête, dont au maximum 100 peuvent contenir des mots de passe en clair. Les hachages précalculés comptent dans la limite de 1 000 utilisateurs. Le Seed Tool utilise des lots allant jusqu’à 1 000 utilisateurs avec son hachage côté client par défaut. Il charge plusieurs lots pour les fichiers plus volumineux. Vous pouvez également utiliser directement les opérations utilisateur de la Control API.
Exemple de temps d’import pour 50 000 utilisateurs
| Scénario | Utilisateurs | Taille de lot | Temps total approx. |
|---|---|---|---|
| Sans mots de passe | 50 000 | 1 000 | ~2 minutes |
| Avec mots de passe | 50 000 | 100 | ~2 heures |
| Hash de mot de passe pré-calculé côté client | 50 000 | 1 000 | ~5 minutes |
Les temps sont approximatifs et dépendent de la machine cliente, du réseau et de l’infrastructure.
L’import d’utilisateurs avec mots de passe prend plus de temps car un hachage de mot de passe doit être calculé pour chaque utilisateur, et cette opération est volontairement coûteuse pour la sécurité. Le temps d’import peut être amélioré en calculant les hachages de mot de passe côté client avant l’import.
Importer avec le seed tool
Le Seed Tool dans tools/FoxIDs.SeedTool lit un fichier CSV et charge ses utilisateurs en masse dans l’environnement FoxIDs configuré via la Control API. Définissez le chemin du fichier dans SeedSettings.UsersSvcPath et sélectionnez U pour le chargement. L’outil prend aussi en charge la suppression en masse des utilisateurs.
Par défaut, le Seed Tool précalcule les hachages de mots de passe pour les mots de passe en clair avant le chargement. Les hachages FoxIDs ou bcrypt fournis sont chargés sans modification lorsque
Passwordest vide ou omis.
Fichier CSV
Enregistrez le fichier CSV en UTF-8, avec des champs séparés par ;. Le texte peut être placé entre guillemets. L’analyseur sépare les champs aux points-virgules ; ils ne peuvent donc contenir ni points-virgules ni sauts de ligne, même entre guillemets.
Vous pouvez trouver des fichiers CSV d’exemple ici. (Par exemple, voir les caractères UTF-8 dans les claims dans le fichier password-claims-3-test-users.csv démontrant la prise en charge multi-langue / caractères étendus.)
La première ligne du fichier CSV est l’en-tête sensible à la casse. Vous pouvez choisir d’utiliser tous les en-têtes ou un sous-ensemble des en-têtes et changer l’ordre des en-têtes. Les en-têtes :
- Phone
- Username
- ConfirmAccount
- EmailVerified
- PhoneVerified
- Password
- PasswordHashAlgorithm
- PasswordHash
- PasswordHashSalt
- ChangePassword
- PasswordLastChanged
- SetPasswordEmail
- SetPasswordSms
- DisableAccount
- Claims
- RequireMultiFactor
Le nombre d’en-têtes et d’éléments dans chaque ligne doit correspondre.
Cet exemple charge un utilisateur sans mot de passe. Omettez Password et toutes les colonnes de hachage, et laissez SetPasswordEmail et SetPasswordSms à false. Activez la connexion sans mot de passe avec le fournisseur e-mail ou SMS correspondant. Préservez l’état de vérification connu de chaque utilisateur.
Email;EmailVerified;SetPasswordEmail;SetPasswordSms
passwordless@example.com;true;false;false
Cet exemple CSV utilise les en-têtes Email et SetPasswordEmail pour charger des utilisateurs qui doivent choisir un mot de passe avec confirmation par e-mail à leur première connexion.
L’email est ensuite marqué comme vérifié.
Email;SetPasswordEmail
u1@somedomain.test;true
u2@somedomain.test;true
u3@somedomain.test;true
Cet exemple CSV inclut un nom d’utilisateur et marque l’adresse e-mail et le numéro de téléphone fournis comme vérifiés. Les mots de passe sont définis avec un code de confirmation par e-mail ou SMS.
Email;Phone;Username;EmailVerified;PhoneVerified;SetPasswordEmail;SetPasswordSms
u1@somedomain.test;;u1;true;true;true;false
;+4422222222;u2;true;true;false;true
u3@somedomain.test;+4433333333;u3;true;true;true;false
Cet exemple CSV charge des utilisateurs avec des mots de passe en clair et des revendications. Le dernier utilisateur est chargé comme utilisateur désactivé.
Email;Phone;Username;ConfirmAccount;EmailVerified;PhoneVerified;Password;ChangePassword;SetPasswordEmail;SetPasswordSms;DisableAccount;Claims;RequireMultiFactor
u1@somedomain.test;+4411111111;u1;false;true;true;"My1Password!";false;false;false;false;"[{""Claim"": ""role"", ""Values"": [""admin""]}]";false
u2@somedomain.test;+4422222222;u2;false;true;true;"My2Password!";true;false;false;false;"[{""Claim"": ""role"", ""Values"": [""admin""]}, {""Claim"": ""customer_id"", ""Values"": [""1234""]}]";true
u3@somedomain.test;+4433333333;u3;false;true;true;"My3Password!";false;false;false;true;"[{""Claim"": ""role"", ""Values"": [""admin"", ""user""]}]";false
Si vous fournissez des hachages précalculés, utilisez les colonnes PasswordHashAlgorithm et PasswordHash et laissez Password vide (ou supprimez-le). Incluez PasswordHashSalt pour P2HS512:10 ; omettez-le pour bcrypt, dont la chaîne complète inclut le sel. Consultez les formats d’import de mots de passe pris en charge. Vous pouvez préserver la date de modification d’origine avec PasswordLastChanged (secondes Unix). Lorsqu’un mot de passe ou un hachage est fourni sans PasswordLastChanged, le chargement enregistre l’heure courante.
Vous devez ajouter des mots de passe et des claims avec la notation ;"";. Si un mot de passe contient le symbole ", il est échappé, par exemple le mot de passe My"Password devient ;"My""Password";
Les claims sont ajoutés avec une structure JSON sans sauts de ligne et les symboles " sont échappés.
[
{ "Claim": "role", "Values": ["admin", "user"] },
{ "Claim": "customer_id", "Values": ["1234"] }
]
Importer des hachages de mots de passe Auth0 bcrypt
Convertissez les données utilisateur Auth0 vérifiées et les hachages correspondants au format CSV du Seed Tool. Placez chaque valeur Auth0 passwordHash complète dans PasswordHash et définissez PasswordHashAlgorithm sur bcrypt. Omettez Password et PasswordHashSalt ; bcrypt inclut son sel dans la chaîne de hachage.
Par exemple, ce compte de test synthétique utilise le format Auth0 $2b$10$ :
Email;EmailVerified;PasswordHashAlgorithm;PasswordHash;SetPasswordEmail;SetPasswordSms;ChangePassword;DisableAccount
auth0.alice@example.com;true;bcrypt;$2b$10$..CA.uOD/eaGAOmJB.yMBu3YunYvFEoaS5IJZ/wiqfQ/EWx.HaqjC;false;false;false;false
Le dépôt source inclut tools/FoxIDs.SeedTool/user_upload_csv_files/auth0-bcrypt-3-test-users.csv avec des hachages synthétiques de coûts 10 et 12, des champs de hachage avec et sans guillemets et un compte désactivé. Ces hachages de test utilisent le mot de passe QAZ!234wsx. Remplacez les données d’exemple par vos utilisateurs vérifiés et leurs propres hachages avant la migration.
Définissez UsersSvcPath sur le fichier CSV converti, puis exécutez le Seed Tool et sélectionnez U. Laissez les indicateurs de création et de changement du mot de passe à false si les utilisateurs doivent conserver leurs mots de passe, et activez la connexion par mot de passe sur la méthode d’authentification Login. Vous pouvez essayer l’import dans un environnement de test et vous connecter avec le mot de passe d’origine d’un utilisateur importé.
Consultez Migrer d’Auth0 vers FoxIDs pour l’export, l’association des hachages aux utilisateurs, les formats pris en charge et la correspondance des comptes.
Télécharger et configurer le seed tool
Téléchargez d’abord le fichier FoxIDs.SeedTool-x.x.x-win-x64.zip pour Windows ou FoxIDs.SeedTool-x.x.x-linux-x64.zip pour Linux depuis la version FoxIDs et décompressez le seed tool.
Le seed tool est configuré dans le fichier appsettings.json.
L’accès pour importer des utilisateurs est accordé dans votre environnement master.
Créez un client OAuth 2.0 pour le seed tool dans le FoxIDs Control Client :
Ceci accordera au seed tool un accès complet à votre tenant, pour le moindre privilège voir Droits d'accès Control API.
- Connectez-vous à votre tenant (en auto-hébergé, le tenant main)
- Sélectionnez l’environnement master (dans le sélecteur d’environnement en haut au centre)
- Sélectionnez l’onglet Applications
- Cliquez sur New Application
- Cliquez sur Backend Application
- Sélectionnez Show advanced
- Ajoutez un Name par exemple
Seed tool - Changez le Client ID en
foxids_seed - Cliquez sur Register
- Mémorisez l’Authority.
- Mémorisez le Client secret.
- Cliquez sur Close
- Cliquez sur l’application dans la liste pour l’ouvrir
- Dans la section Resource and scopes
- Retirez la coche de Default resource 'foxids_seed' for the application itself
- Cliquez sur Add Resource and scope et ajoutez la ressource
foxids_control_api - Cliquez ensuite sur Add Scope et ajoutez le scope
foxids:tenant
- Sélectionnez Show advanced
- Dans la section Issue claims
- Cliquez sur Add Claim et ajoutez le claim
role - Cliquez ensuite sur Add Value et ajoutez la valeur de claim
foxids:tenant
- Cliquez sur Add Claim et ajoutez le claim
- Cliquez sur Update

Ajoutez votre endpoint FoxIDs Control API et le tenant et l’environment ainsi que l’Authority et le Client secret du seed tool, et le chemin du fichier CSV à la configuration du seed tool.
"SeedSettings": {
"FoxIDsControlEndpoint": "https://control.foxids.com", // self-hosted "https://control.yyyyxxxx.com" or local development https://localhost:44331
"Tenant": "xxxxxx",
"Environment": "xxxxxx",
"Authority": "https://id.foxids.com/zzzzz/master/foxids_seed/", // custom domain, self-hosted or local development "https://https://localhost:44331/zzzzz/master/foxids_seed/"
"ClientId": "foxids_master_seed",
"ClientSecret": "xxxxxx",
"Scope": "foxids_control_api:foxids:tenant",
"UsersSvcPath": "c:\\... xxx ...\\users.csv"
}
Exécuter le seed tool et importer les utilisateurs
- Démarrez une invite de commandes
- Exécutez le seed tool avec
SeedTool.exe - Cliquez sur
Upour démarrer l’import des utilisateurs
L’import peut prendre un certain temps selon le nombre d’utilisateurs.
Le Seed Tool indique le nombre de réussites et d’échecs et les utilisateurs importés sont disponibles dans FoxIDs Control. Vous pouvez essayer un chargement avec un petit CSV dans un environnement de test et y examiner les utilisateurs obtenus. Le chargement en masse peut remplacer des utilisateurs existants et leurs identifiants ; vérifiez les collisions d’identifiants avant le chargement et rapprochez tout résultat partiel avant de réessayer.