Pular para o conteúdo

Migração de usuários

Traga usuários e configuração do Keycloak, Auth0, AWS Cognito, Okta ou de um CSV, mantendo as senhas sempre que a origem exporta os hashes.

O Authio importa a partir de um arquivo: o export que o seu provedor atual entrega, ou uma lista em CSV ou JSON gerada por você. Toda importação é ensaiada primeiro — nada é gravado até você ler um relatório do que aconteceria — e cada linha passa pelas mesmas validações, cotas de plano e permissões de uma mudança feita no console. Linhas que já existem são puladas, então rodar o mesmo arquivo de novo é seguro.

As senhas chegam como os hashes que o sistema antigo guardava. O Authio confere esse hash no formato original na primeira vez que a pessoa entra e o substitui por um hash nativo, então ninguém precisa redefinir uma senha que a origem permitiu exportar. O Authio nunca chama o seu provedor antigo: o que não está no arquivo precisa ser recriado.

Escolha um caminho

CaminhoUse quandoOnde
Migrar de um provedorVocê tem um export do Keycloak, Auth0, AWS Cognito ou Okta. Ele pode trazer realms, papéis, clients e provedores de identidade junto com os usuários.Migração, com a permissão realm:write
Importar um arquivo de usuáriosVocê tem uma lista de pessoas de qualquer sistema, em CSV ou JSON.Usuários › Importar de arquivo, com a permissão client:write

As outras listas principais — realms, papéis, escopos, clients, provedores de identidade, consumers, segredos de API, chaves de assinatura e webhooks — têm a mesma ação Importar de arquivo, com o mesmo fluxo de ensaiar e depois aplicar.

Origens aceitas

OrigemArquivo a enviarSenhas
KeycloakUm export do realm com os usuários, em JSON: kc.sh export --realm <name> --users realm_file.Credenciais PBKDF2 (SHA-256 ou SHA-512) e Argon2id migram sem redefinição. PBKDF2 sobre SHA-1, e credenciais Argon2 exportadas sem os parâmetros, exigem redefinição.
Auth0A saída de um job de exportação em massa de usuários, em JSON delimitado por linha.Hashes bcrypt migram sem redefinição quando o arquivo os traz. O job de exportação comum os deixa de fora: peça à Auth0 que libere os hashes.
AWS CognitoO user pool exportado em CSV.O Cognito não exporta material de senha, então todos definem uma senha nova. Atributos, endereços confirmados e telefones vêm junto.
OktaO JSON devolvido por GET /api/v1/users, salvo com todas as páginas. O Okta não tem arquivo de exportação.Não vêm nessa resposta, então todos definem uma senha nova. Só as contas que o Okta lista como ACTIVE chegam com o endereço confirmado.
Um pacote AuthioUm pacote baixado de uma tradução anterior e corrigido, ou escrito à mão.Lidas do passwordHash de cada usuário.

Do Keycloak, o Authio lê o realm, os papéis, os client scopes, os clients, os provedores de identidade e os usuários. Ele não importa segredos de clients nem de provedores de identidade, que todo export do Keycloak mascara, nem os clients internos do próprio Keycloak, como account e security-admin-console, nem os escopos padrão. Clients públicos chegam exigindo PKCE.

Migre de um provedor

  1. Exporte do provedor atual

    Gere o arquivo que a tabela acima descreve para a sua origem. Trate-o como uma credencial: ele pode conter hashes de senha e outros segredos.

  2. Leia o export

    Abra Migração, escolha o seu provedor em De onde você está vindo? e depois escolha o arquivo ou cole o conteúdo dele. Ler o export traduz o arquivo para um pacote Authio sem gravar nada e mostra quantas linhas foram entendidas em cada seção.

    Se algo precisar de correção, escolha Baixar como pacote, edite o JSON e envie de novo com Um pacote Authio como origem.

  3. Ensaie a importação

    Ensaiar a importação roda a importação inteira sem gravar nada. O relatório conta o que seria criado, o que já existe e o que não pôde ser usado, por seção e linha a linha, com a linha do arquivo e o motivo de cada problema.

  4. Aplique a importação

    Aplicar a importação roda as mesmas validações de verdade e relata linha a linha o que foi criado. Ele só libera depois de um ensaio exatamente do conteúdo que está na tela, e fica bloqueado enquanto o ensaio tiver recusado parte do arquivo, enquanto o seu papel não puder criar algum tipo de recurso que o arquivo traz, ou quando não houver nada a criar.

As seções são aplicadas em ordem de dependência — realms, papéis, escopos, clients, provedores de identidade, consumers, segredos, chaves de assinatura, webhooks, usuários — qualquer que seja a ordem no arquivo. Cada seção exige a permissão de escrita do próprio recurso. Se uma execução real parar no meio, ensaie de novo antes de aplicar: parte do arquivo pode já ter sido gravada.

Importe um arquivo de usuários

Em Usuários, escolha Importar de arquivo e depois escolha um arquivo ou cole o conteúdo. Com um realm em escopo, e opcionalmente um client, toda linha é criada ali, diga o arquivo o que disser. Com todos os realms em escopo, cada linha informa o próprio realm e, opcionalmente, o client.

As colunas do CSV são casadas pelo nome, não pela posição, então a ordem em que saem do sistema antigo não importa:

ColunaObrigatóriaO que contém
emailSimO endereço da pessoa. Um endereço que já tem conta é pulado.
usernameNãoO username, quando for diferente do endereço.
firstname, lastnameNãoO nome da pessoa.
phoneNãoUm telefone.
passwordNãoUma senha em texto puro, validada e transformada em hash como uma senha definida no console.
passwordhashNãoO hash do sistema antigo, em um dos formatos abaixo. Uma linha não pode trazer senha e hash ao mesmo tempo.
emailconfirmedNãotrue, 1 ou yes marca o endereço como já confirmado.
rolesNãoNomes de papéis separados por ponto e vírgula. Os papéis precisam já existir na sua conta.
sendemailNãoSe esta pessoa recebe e-mail sobre a conta. Célula vazia, true, 1 ou yes mandam o e-mail; qualquer outro valor a deixa de fora. Com Enviar e-mail às pessoas criadas desligado, ninguém recebe e-mail, diga a coluna o que disser.
realm, clientSó com todos os realms em escopoOnde a pessoa é criada.
users.csvTexto simples
email,username,firstname,lastname,emailconfirmed,roles,passwordhash
ana@acme.com,ana,Ana,Souza,true,support;billing,$2a$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
bruno@acme.com,bruno,Bruno,Lima,false,support,

Escolha Ensaiar, leia o relatório e depois Aplicar. Quando o seu plano inclui o consultor de IA, o ensaio também diz o que a IA vê no arquivo, por exemplo muitas linhas parecidas de um jeito que sugere engano; veja Authio AI.

Pelas suas próprias ferramentas, POST /api/v1/admin/realms/{realm}/clients/{client}/users/import recebe o arquivo em content, isJson para dizer que é JSON, dryRun, que vale true a menos que você envie false, e sendEmail, também true por padrão, em que false não manda e-mail a ninguém que o arquivo criar. Veja a Admin API.

Formatos de hash de senha

Só formatos que se descrevem sozinhos — com o algoritmo, os parâmetros e o sal dentro da própria string — podem ser conferidos:

FormatoForma
PBKDF2, forma do Djangopbkdf2_sha256$<iterations>$<salt>$<hash>, ou pbkdf2_sha512
PBKDF2, forma PHC$pbkdf2-sha256$i=<iterations>$<salt>$<hash>, ou pbkdf2-sha512
SHA-2 com sal (RFC 2307){SSHA256} ou {SSHA512} seguido do Base64 do hash com o sal
bcrypt$2a$, $2b$, $2x$ ou $2y$
Argon2id, forma PHC$argon2id$v=19$m=<memory>,t=<passes>,p=<lanes>$<salt>$<hash>

Outros formatos não são recusados na importação

Um hash em qualquer outro formato — scrypt, um digest sem o sal, PBKDF2 sobre SHA-1 — é gravado, mas nunca vai conferir, e essa pessoa não consegue entrar com a senha antiga. Deixe passwordhash vazio para ela e planeje que ela defina uma senha pela recuperação de senha do login hospedado.

Antes de virar a chave

  • As pessoas importadas recebem e-mail, a menos que você desligue. Cada uma é criada como uma conta feita no console: um link de confirmação quando o endereço não está confirmado, e, se estiver, uma mensagem dizendo que a conta está pronta. Para criá-las sem escrever a ninguém, desligue Enviar e-mail às pessoas criadas na importação ou na migração; o e-mail de confirmação pode ser reenviado depois na página de cada pessoa. Caso contrário, marque emailconfirmed nos endereços que o sistema antigo já tinha verificado, e avise as pessoas da mudança.
  • Os webhooks disparam. Cada pessoa criada gera um user_created nos webhooks do client. Garanta que os seus receptores aguentam uma rajada, ou cadastre os endpoints depois da importação.
  • As cotas valem. Os usuários contam no seu plano conforme são criados. Quando a cota acaba, a seção de usuários para e o dono da conta é avisado uma vez.
  • Arquivos grandes. Um envio aceita até 50.000 linhas; divida exports maiores.
  • Contas existentes ficam como estão. Uma linha cujo endereço já tem conta é pulada, não atualizada.
  • Segredos. Segredos de clients e de provedores de identidade não vêm do Keycloak; configure-os no Authio antes de as suas aplicações migrarem.
  • As sessões não migram. Tokens e sessões do provedor antigo não valem no Authio. Quando uma aplicação passa a apontar para o novo emissor, como https://authio.api.hyperio.tech/realms/acme, as pessoas entram de novo.
  • Apague os arquivos. Exports e arquivos de importação podem conter hashes e segredos em texto puro. Remova-os quando a migração terminar.

Próximos passos

Cookies de analytics

Gostaríamos de medir como o console é usado, com o Google Analytics, para enxergar em quais telas as pessoas travam. Isso grava um cookie que reconhece este navegador na sua próxima visita.

Recusar não muda mais nada. Os cookies que mantêm você conectado e lembram o seu idioma e o seu tema são necessários para o console funcionar, e ficam de qualquer forma. Ler a Política de Privacidade