Caricare molti utenti

Usa FoxIDs Seed Tool per caricare utenti da un CSV in un ambiente FoxIDs come utenti interni. Ogni utente può essere caricato con:

  • Nessuna password, per l’accesso senza password con codice monouso via e-mail o SMS.
  • Nessuna password e l’obbligo di sceglierne una al primo accesso, confermato via e-mail o SMS.
  • Una password nota in chiaro, di cui Seed Tool calcola l’hash prima del caricamento per impostazione predefinita.
  • Un hash di password FoxIDs precalcolato e il relativo salt separato.
  • Un hash di password Auth0 bcrypt, che permette di mantenere la password esistente.

La Control API accetta fino a 1.000 utenti per richiesta, di cui al massimo 100 possono contenere password in chiaro. Gli hash precalcolati rientrano nel limite di 1.000 utenti. Seed Tool usa lotti fino a 1.000 utenti con il calcolo dell’hash lato client predefinito. Per file più grandi carica più lotti. Puoi anche usare direttamente le operazioni utente della Control API.

Esempio di tempo di upload per 50.000 utenti

Scenario Users Batch size Approx. total time
Without passwords 50,000 1,000 ~2 minutes
With passwords 50,000 100 ~2 hours
Password hashes pre-calculated on client 50,000 1,000 ~5 minutes

I tempi sono approssimativi e dipendono dalla macchina client, dalla rete e dall'infrastruttura.

Il caricamento degli utenti con password richiede piu tempo perche per ogni utente deve essere calcolato un hash della password, e questa operazione richiede intenzionalmente tempo per motivi di sicurezza. Il tempo di upload puo essere migliorato calcolando gli hash password sul client prima di caricare gli utenti.

Upload con seed tool

Seed Tool in tools/FoxIDs.SeedTool legge un CSV e carica gli utenti in blocco nell’ambiente FoxIDs configurato tramite Control API. Imposta il percorso in SeedSettings.UsersSvcPath e seleziona U per caricare. Lo strumento supporta anche l’eliminazione in blocco degli utenti.

Per impostazione predefinita, Seed Tool precalcola gli hash delle password per le password in chiaro prima del caricamento. Gli hash FoxIDs o bcrypt forniti vengono caricati senza modifiche quando Password è vuoto o omesso.

File CSV

Salva il CSV in UTF-8, con campi separati da ;. Il testo può essere racchiuso tra virgolette. Il parser divide sui punti e virgola, quindi i campi non possono contenere punti e virgola o interruzioni di riga, neppure tra virgolette.

Puoi trovare file CSV di esempio qui. (Ad esempio, vedi i caratteri UTF-8 nei claim nel file password-claims-3-test-users.csv che dimostra il supporto multi-lingua / per caratteri estesi.)

La prima riga del file CSV contiene gli header case sensitive. Puoi scegliere di usare tutti gli header oppure un sottoinsieme degli header e cambiare l'ordine degli header. Gli header:

  • Email
  • Phone
  • Username
  • ConfirmAccount
  • EmailVerified
  • PhoneVerified
  • Password
  • PasswordHashAlgorithm
  • PasswordHash
  • PasswordHashSalt
  • ChangePassword
  • PasswordLastChanged
  • SetPasswordEmail
  • SetPasswordSms
  • DisableAccount
  • Claims
  • RequireMultiFactor

Il numero di header e di elementi in ogni riga deve corrispondere.

Questo esempio carica un utente senza password. Ometti Password e tutte le colonne di hash e mantieni SetPasswordEmail e SetPasswordSms su false. Abilita l’accesso senza password con il provider e-mail o SMS corrispondente. Preserva lo stato di verifica noto di ogni utente.

Email;EmailVerified;SetPasswordEmail;SetPasswordSms
passwordless@example.com;true;false;false

Questo esempio CSV usa le intestazioni Email e SetPasswordEmail per caricare utenti che devono scegliere una password con conferma via e-mail al primo accesso. L'email viene poi contrassegnata come verificata.

Email;SetPasswordEmail
u1@somedomain.test;true
u2@somedomain.test;true
u3@somedomain.test;true

Questo esempio CSV include un nome utente e contrassegna l’indirizzo e-mail e il telefono forniti come verificati. Le password vengono impostate con un codice di conferma via e-mail o 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

Questo esempio CSV carica utenti con password in chiaro e claim. L’ultimo utente viene caricato come disabilitato.

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

Se fornisci hash precalcolati, usa le colonne PasswordHashAlgorithm e PasswordHash e lascia Password vuoto (o rimuovilo). Includi PasswordHashSalt per P2HS512:10; omettilo per bcrypt, la cui stringa completa contiene il salt. Consulta i formati di importazione password supportati. Puoi mantenere il timestamp originale della modifica con PasswordLastChanged (secondi Unix). Quando una password o un hash sono forniti senza PasswordLastChanged, il caricamento registra l’ora corrente.

Dovresti aggiungere password e claim con la notazione ;"";. Se una password contiene il simbolo ", viene effettuato l'escape, ad esempio la password My"Password che diventa ;"My""Password";

I claim vengono aggiunti con una struttura JSON senza interruzioni di riga e i simboli " vengono escaped.

[
  { "Claim": "role", "Values": ["admin", "user"] },
  { "Claim": "customer_id", "Values": ["1234"] }
]

Importare hash delle password Auth0 bcrypt

Converti i dati utente Auth0 verificati e gli hash corrispondenti nel formato CSV di Seed Tool. Inserisci ogni valore Auth0 passwordHash completo in PasswordHash e imposta PasswordHashAlgorithm su bcrypt. Ometti Password e PasswordHashSalt; bcrypt include il salt nella stringa dell’hash.

Ad esempio, questo account di test sintetico usa il formato 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

Il repository contiene tools/FoxIDs.SeedTool/user_upload_csv_files/auth0-bcrypt-3-test-users.csv con hash sintetici di costo 10 e 12, campi hash con e senza virgolette e un account disabilitato. Gli hash di test usano la password QAZ!234wsx. Sostituisci i dati di esempio con utenti verificati e relativi hash prima della migrazione.

Imposta UsersSvcPath sul CSV convertito, quindi esegui Seed Tool e seleziona U. Mantieni i flag di impostazione e modifica della password su false se gli utenti devono conservare le password esistenti e abilita l’accesso con password nel metodo Login. Puoi provare l’importazione in un ambiente di test e accedere con la password originale di un utente importato.

Consulta Migrare da Auth0 a FoxIDs per esportazione, associazione degli hash agli utenti, formati supportati e associazione degli account.

Scaricare e configurare il seed tool

Per prima cosa scarica il file FoxIDs.SeedTool-x.x.x-win-x64.zip per Windows oppure FoxIDs.SeedTool-x.x.x-linux-x64.zip per Linux dalla release di FoxIDs ed estrai il seed tool.

Il seed tool viene configurato nel file appsettings.json.

L'accesso per caricare utenti viene concesso nel tuo ambiente master.

Crea un client OAuth 2.0 del seed tool nel FoxIDs Control Client:

Questo concedera al seed tool pieno accesso al tuo tenant; per privilegi minimi consulta Diritti di accesso Control API.

  1. Accedi al tuo tenant (in self-hosted il tenant principale)
  2. Seleziona l'ambiente master (nel selettore ambiente in alto al centro)
  3. Seleziona la scheda Applications
  4. Fai clic su New Application
  5. Fai clic su Backend Application
    1. Seleziona Show advanced
    2. Aggiungi un Name ad esempio Seed tool
    3. Cambia il Client ID in foxids_seed
    4. Fai clic su Register
    5. Ricorda l'Authority.
    6. Ricorda il Client secret.
    7. Fai clic su Close
  6. Fai clic sull'applicazione nell'elenco per aprirla
  7. Nella sezione Resource and scopes
    1. Rimuovi il segno di spunta da Default resource 'foxids_seed' for the application itself
    2. Fai clic su Add Resource and scope e aggiungi la risorsa foxids_control_api
    3. Poi fai clic su Add Scope e aggiungi lo scope foxids:tenant
  8. Seleziona Show advanced
  9. Nella sezione Issue claims
    1. Fai clic su Add Claim e aggiungi il claim role
    2. Poi fai clic su Add Value e aggiungi il valore claim foxids:tenant
  10. Fai clic su Update

FoxIDs Control Client - master seed tool client

Aggiungi al file di configurazione del seed tool il tuo endpoint FoxIDs Control API, tenant ed environment, oltre ad Authority, Client secret e percorso del file CSV.

"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"
}

Eseguire il seed tool e caricare gli utenti

  1. Avvia un prompt dei comandi
  2. Esegui il seed tool con SeedTool.exe
  3. Fai clic su U per iniziare a caricare gli utenti

L'upload puo richiedere un po' di tempo a seconda del numero di utenti.

Seed Tool riporta il numero di operazioni riuscite e fallite e gli utenti importati sono disponibili in FoxIDs Control. Puoi provare un caricamento con un piccolo CSV in un ambiente di test ed esaminare gli utenti risultanti. Il caricamento in blocco può sostituire utenti e credenziali esistenti; verifica le collisioni degli identificatori prima di caricare e riconcilia i caricamenti parziali prima di riprovare.