Subir muchos usuarios

Utiliza FoxIDs Seed Tool para cargar usuarios de un archivo CSV en un entorno FoxIDs como usuarios internos. Cada usuario puede cargarse con:

  • Ninguna contraseña, para iniciar sesión sin contraseña con un código de un solo uso por correo o SMS.
  • Ninguna contraseña y el requisito de elegir una en el primer inicio de sesión, confirmado por correo o SMS.
  • Una contraseña conocida en texto plano, que Seed Tool convierte en hash antes de cargarla de forma predeterminada.
  • Un hash de contraseña FoxIDs precalculado con su sal separada.
  • Un hash de contraseña Auth0 bcrypt que permite conservar la contraseña existente.

Control API acepta hasta 1.000 usuarios por petición, de los cuales como máximo 100 pueden contener contraseñas en texto plano. Los hashes precalculados cuentan para el límite de 1.000 usuarios. Seed Tool utiliza lotes de hasta 1.000 usuarios con su hashing predeterminado en el cliente. Para archivos mayores carga varios lotes. También puedes utilizar directamente las operaciones de usuarios de Control API.

Ejemplo de tiempo de carga para 50.000 usuarios

Escenario Usuarios Tamaño de lote Tiempo total aprox.
Sin contraseñas 50.000 1.000 ~2 minutos
Con contraseñas 50.000 100 ~2 horas
Hash de contraseñas pre calculado en cliente 50.000 1.000 ~5 minutos

Los tiempos son aproximados y dependen de la máquina cliente, la red y la infraestructura.

Subir usuarios con contraseñas tarda más porque se debe calcular un hash de contraseña para cada usuario, y esta operación es intencionalmente costosa por seguridad. El tiempo de carga puede mejorarse calculando los hashes de contraseña en el cliente antes de subir los usuarios.

Subir con seed tool

Seed Tool, en tools/FoxIDs.SeedTool, lee un archivo CSV y carga sus usuarios en masa al entorno FoxIDs configurado mediante Control API. Establece la ruta en SeedSettings.UsersSvcPath y selecciona U para cargar. La herramienta también admite la eliminación masiva de usuarios.

De forma predeterminada, Seed Tool precalcula los hashes de contraseña de las contraseñas en texto plano antes de cargarlas. Los hashes FoxIDs o bcrypt proporcionados se cargan sin cambios cuando Password está vacío o se omite.

Archivo CSV

Guarda el CSV como UTF-8 con campos separados por ;. El texto puede ir entre comillas. El analizador divide por puntos y coma, por lo que los campos no pueden contener puntos y coma ni saltos de línea, ni siquiera entre comillas.

Puede encontrar archivos CSV de ejemplo aquí. (Por ejemplo, ver caracteres UTF-8 en claims en el archivo password-claims-3-test-users.csv que demuestra compatibilidad con varios idiomas / caracteres extendidos.)

La primera línea del archivo CSV son los encabezados sensibles a mayúsculas/minúsculas. Puedes elegir usar todos los encabezados o un subconjunto y cambiar el orden de los encabezados. Los encabezados:

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

El número de encabezados y elementos en cada línea debe coincidir.

Este ejemplo carga un usuario sin contraseña. Omite Password y todas las columnas de hash, y mantén SetPasswordEmail y SetPasswordSms en false. Activa el inicio de sesión sin contraseña con el proveedor de correo o SMS correspondiente. Conserva el estado de verificación conocido de cada usuario.

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

Este ejemplo CSV utiliza los encabezados Email y SetPasswordEmail para cargar usuarios que deben elegir una contraseña con confirmación por correo en su primer inicio de sesión. Luego el email se marca como verificado.

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

Este ejemplo CSV incluye un nombre de usuario y marca como verificados el correo y teléfono proporcionados. Las contraseñas se establecen con un código de confirmación por correo 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

Este ejemplo CSV carga usuarios con contraseñas en texto plano y reclamaciones. El último usuario se carga como deshabilitado.

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 proporcionas hashes precalculados, utiliza las columnas PasswordHashAlgorithm y PasswordHash y deja Password vacío (o elimínalo). Incluye PasswordHashSalt para P2HS512:10; omítelo para bcrypt, cuya cadena completa incluye la sal. Consulta los formatos de importación de contraseñas compatibles. Puedes conservar la fecha de cambio original mediante PasswordLastChanged (segundos Unix). Si se proporciona una contraseña o hash sin PasswordLastChanged, la carga registra la hora actual.

Debes agregar contraseñas y claims con la notación ;"";. Si una contraseña contiene el símbolo " se escapa, por ejemplo la contraseña My"Password se convierte en ;"My""Password";

Los claims se agregan con una estructura JSON sin saltos de línea y los símbolos " se escapan.

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

Importar hashes de contraseña Auth0 bcrypt

Convierte los datos de usuarios de Auth0 revisados y sus hashes correspondientes al formato CSV de Seed Tool. Pon cada valor Auth0 passwordHash completo en PasswordHash y establece PasswordHashAlgorithm en bcrypt. Omite Password y PasswordHashSalt; bcrypt incluye su sal en la cadena del hash.

Por ejemplo, esta cuenta de prueba sintética utiliza el formato de 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

El repositorio incluye tools/FoxIDs.SeedTool/user_upload_csv_files/auth0-bcrypt-3-test-users.csv con hashes sintéticos de costes 10 y 12, campos de hash con y sin comillas y una cuenta deshabilitada. Estos hashes de prueba utilizan la contraseña QAZ!234wsx. Sustituye los datos de ejemplo por tus usuarios revisados y sus propios hashes antes de migrar.

Establece UsersSvcPath en el archivo CSV convertido y después ejecuta Seed Tool y selecciona U. Mantén los indicadores de creación y cambio de contraseña en false si los usuarios deben conservar sus contraseñas y activa el inicio de sesión con contraseña en el método Login. Puedes probar la importación en un entorno de pruebas e iniciar sesión con la contraseña original de un usuario importado.

Consulta Migrar de Auth0 a FoxIDs para la exportación, asociación de hashes a usuarios, formatos compatibles y correspondencia de cuentas.

Descargar y configurar el seed tool

Primero descarga el archivo FoxIDs.SeedTool-x.x.x-win-x64.zip para Windows o FoxIDs.SeedTool-x.x.x-linux-x64.zip para Linux desde la versión de FoxIDs y descomprime el seed tool.

El seed tool se configura en el archivo appsettings.json.

El acceso para subir usuarios se concede en tu entorno master.

Crea un cliente OAuth 2.0 del seed tool en el FoxIDs Control Client:

Esto otorgará al seed tool acceso completo a tu tenant; para el menor privilegio, consulta Derechos de acceso de Control API.

  1. Inicia sesión en tu tenant (en auto hospedado el tenant main)
  2. Selecciona el entorno master (en el selector de entorno en la parte superior central)
  3. Selecciona la pestaña Applications
  4. Haz clic en New Application
  5. Haz clic en Backend Application
    1. Selecciona Show advanced
    2. Añade un Name por ejemplo Seed tool
    3. Cambia el Client ID a foxids_seed
    4. Haz clic en Register
    5. Recuerda el Authority.
    6. Recuerda el Client secret.
    7. Haz clic en Close
  6. Haz clic en la aplicación en la lista para abrirla
  7. En la sección Resource and scopes
    1. Quita la marca de Default resource 'foxids_seed' for the application itself
    2. Haz clic en Add Resource and scope y añade el recurso foxids_control_api
    3. Luego haz clic en Add Scope y añade el scope foxids:tenant
  8. Selecciona Show advanced
  9. En la sección Issue claims
    1. Haz clic en Add Claim y añade el claim role
    2. Luego haz clic en Add Value y añade el valor del claim foxids:tenant
  10. Haz clic en Update

FoxIDs Control Client - master seed tool client

Agrega tu endpoint de FoxIDs Control API y el tenant y el environment y el Authority y el Client secret del seed tool y la ruta del archivo CSV a la configuración del 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"
}

Ejecutar el seed tool y subir los usuarios

  1. Inicia un símbolo del sistema
  2. Ejecuta el seed tool con SeedTool.exe
  3. Pulsa U para iniciar la carga de usuarios

La carga puede tardar un tiempo según el número de usuarios.

Seed Tool informa de los recuentos de éxitos y errores y los usuarios importados están disponibles en FoxIDs Control. Puedes probar una carga con un CSV pequeño en un entorno de pruebas y examinar allí los usuarios resultantes. La carga masiva puede sustituir usuarios existentes y sus credenciales; comprueba las colisiones de identificadores antes de cargar y concilia las cargas parciales antes de reintentar.