Pular para o conteúdo principal

Migração de usuários

O Logto suporta a migração manual de usuários existentes de outra plataforma. Este guia mostrará como importar usuários existentes via Management API e falará sobre pontos que você deve considerar antes de migrar.

Esquema de usuário

Antes de começarmos, vamos dar uma olhada no esquema de usuário no Logto. Existem 3 partes do esquema de usuário que você deve conhecer:

  1. Dados básicos: são as informações básicas do perfil do usuário, você pode mapear os dados do seu perfil de usuário existente.
  2. Dados personalizados: armazena informações adicionais do usuário, você pode usar isso para armazenar arquivos que não podem ser mapeados nos dados básicos.
  3. Identidades sociais: armazena as informações do usuário recuperadas do login social.

Você pode criar um mapa para associar as informações do seu perfil de usuário existente aos dados básicos e dados personalizados. Para login social, serão necessários passos adicionais para importar as identidades sociais; consulte a API de Vincular identidade social ao usuário.

Hash de senha

O Logto utiliza Argon2 para hashear a senha do usuário, e também suporta outros algoritmos como MD5, SHA1, SHA256 e Bcrypt para facilitar a migração. Esses algoritmos são considerados inseguros; os hashes de senha correspondentes serão migrados para Argon2 no primeiro login bem-sucedido do usuário.

Se você estiver usando outros algoritmos de hash ou salt, pode definir o passwordAlgorithm como Legacy, permitindo o uso de qualquer algoritmo de hash suportado pelo Node.js. Você pode encontrar a lista de algoritmos suportados na documentação do Node.js crypto. Nesse caso, o passwordDigest será uma string JSON que contém o algoritmo de hash e outros parâmetros específicos do algoritmo.

O formato da string JSON é o seguinte:

["hash_algorithm", ["argument1", "argument2", ...], "expected_hashed_value"]

E você pode usar @ como um placeholder para o valor real da senha nos argumentos.

Por exemplo, se você estiver usando SHA256 com um salt, pode armazenar a senha no seguinte formato:

["sha256", ["salt123", "@"], "c465f66c6ac481a7a17e9ed5b4e2e7e7288d892f12bf1c95c140901e9a70436e"]

Isso equivale ao seguinte código:

const hash = crypto.createHash('sha256');
hash.update('salt123' + 'password123');
const expectedHashedValue = hash.digest('hex');

Etapas para migrar

  1. Prepare os dados do usuário
    Você deve primeiro exportar os dados dos usuários da sua plataforma atual e, em seguida, mapear as informações do usuário para o esquema de usuário do Logto. Recomendamos preparar os dados mapeados em formato JSON. Aqui está um exemplo dos dados do usuário:

    [
    {
    "username": "user1",
    "passwordDigest": "password-encrypted",
    "passwordAlgorithm": "SHA256"
    },
    {
    "username": "user2",
    "passwordDigest": "password-encrypted",
    "passwordAlgorithm": "SHA256"
    }
    ]
  2. Crie um tenant Logto
    Você precisará configurar um tenant no Logto. Você pode usar tanto o Logto Cloud quanto o Logto OSS. Se ainda não fez isso, consulte o guia Configurar Logto cloud.

  3. Configure a conexão com a Management API
    Usaremos a Management API para importar os dados dos usuários. Você pode consultar a Management API para aprender como configurar a conexão em seu ambiente de desenvolvimento.

  4. Importe os dados dos usuários
    Recomenda-se preparar um script para importar os dados dos usuários um por um. Chamaremos a API criar usuário para importar os dados. Veja um exemplo 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),
    });
    // Aguarde um tempo para evitar limite de taxa
    await new Promise((resolve) => setTimeout(resolve, 200));
    } catch (error) {
    console.error(`Falha ao importar usuário ${user.username}: ${error.message}`);
    }
    }
    };

    importUsers();

Observe que o endpoint da API possui limite de taxa; você deve adicionar uma pausa entre cada requisição para evitar o rate limit. Consulte nossa página de limites de taxa para mais detalhes.

Se você tiver uma grande quantidade de dados de usuários (100k+ usuários), pode entrar em contato conosco para aumentar o limite de taxa.

Um guia geral para migrar seu banco de dados de usuários existente para o Logto