Todos os posts

Saindo do Duende auto-hospedado: o que migra e o que você deixa de operar

AuthagonalJune 18, 2026
duendeidentityserverdotnetoidcmigration

Traduzido por IA a partir do original em inglês. Ler o original

O Duende IdentityServer é um software genuinamente bom: se você quer ser dono da sua camada de identidade de ponta a ponta, ele é o padrão no .NET. Mas "ser dono" é justamente todo o custo: você o hospeda, o corrige, o escala e constrói tudo ao redor dele, a interface de administração, o MFA, os logs de auditoria, a identidade visual, uma página de status, a gestão de usuários e papéis. Em algum momento, uma equipe decide que prefere não operar um IdP, e a única pergunta que importa é o quão doloroso é migrar. Aqui está o que de fato migra.

O que você está realmente operando

Auto-hospedar o Duende o deixa responsável por muito mais do que os endpoints de tokens:

  • O próprio IdP: hospedagem, escalonamento, aplicação de patches e a licença (o SAML é um complemento pago à parte).
  • Tudo ao redor dele que você mesmo construiu: portal de administração, cadastro de MFA, registro de auditoria, identidade visual personalizada, uma página de status, gestão de usuários e papéis.

É nessa segunda lista que normalmente vai o tempo de verdade.

O que migra, e é em grande parte mecânico

O Duende mantém sua configuração em SQL (a ConfigurationDb) e seus usuários no ASP.NET Identity. Uma migração lê os dois:

  • Clients → clientes OAuth, incluindo URIs de redirecionamento e de logout, origens CORS, tipos de concessão, semântica de uso/expiração de refresh tokens e tempos de vida de device codes. Clientes desativados são importados desativados; segredos expirados são ignorados com um aviso.
  • Scopes → os ApiScopes e IdentityResources mapeiam diretamente. A camada intermediária ApiResource do Duende (uma audience mais uma lista de claims compartilhada) se achata sobre o modelo mais simples: o nome do recurso vira uma audience em cada cliente que usa um scope membro, e suas claims se mesclam a esses scopes.
  • Users → a boa notícia: os hashes de senha do ASP.NET Identity V3 (e o bcrypt legado) são verificados nativamente e refeitos no primeiro login. Sem redefinições de senha, sem ticket de suporte, nada que seus usuários percebam. (Essa é a parte genuinamente difícil ao sair do Auth0: com o Duende simplesmente funciona, porque é o mesmo hashing que sua aplicação já usa.)
  • Os papéis e atribuições, os logins externos e os provedores de identidade OIDC vêm todos junto. Os provedores SAML são sinalizados para você reconfigurar do outro lado.

A parte da estabilidade da identidade

Como em qualquer troca de IdP, o que é preciso acertar é não alterar o sub do usuário nem o client_id: os refresh tokens a jusante, as linhas SCIM nos IdPs dos clientes e os IDs de usuário armazenados no seu próprio banco de dados referenciam todos eles. O importador preserva ambos. E se um dos donos do seu portal também existir como usuário do Duende sob um ID diferente, ele os reconcilia (rotacionando para o sub do Duende) por meio de passos escalonados e recuperáveis, em vez de deixar um dono migrado pela metade que não consegue fazer login.

Um à parte sobre testar migrações (uma armadilha do .NET)

Testamos o importador contra um banco de dados Duende real e populado, não contra mocks, e isso valeu a pena. O ASP.NET Identity armazena AspNetUsers.LockoutEnd como datetimeoffset, e lê-lo com reader.GetDateTime() lança uma InvalidCastException nesse tipo. Então um único usuário bloqueado teria feito a importação de usuários inteira falhar. Você só descobre isso executando o importador contra dados reais que tenham um usuário bloqueado neles. Se você está avaliando alguma ferramenta de migração, essa é a pergunta que vale a pena fazer: ela é testada contra um banco de dados populado, ou apenas mockada contra a API de origem?

O que você deixa de fazer

O sentido de migrar não é a migração: é tudo o que vem depois dela. SAML, SCIM, MFA, logs de auditoria, domínios personalizados e identidade visual vêm incluídos em vez de serem coisas que você constrói e opera, e aplicar patches e escalar o IdP deixam de ser problema seu. Se auto-hospedar o Duende foi uma decisão deliberada ("queremos controle total") e ainda é, fique: essa é uma escolha perfeitamente boa. Isto é para quando operar um IdP deixou de ser onde você quer gastar o seu tempo.

Se você está considerando

A migração é em grande parte mecânica, as senhas são transferidas sem redefinições, e a prévia é somente leitura: aponte-a para o seu banco de dados Duende e ela mostra exatamente o que seria importado antes de qualquer coisa ser gravada.

Migrar do Duende