Saindo do Duende auto-hospedado: o que migra e o que você deixa de operar
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
ApiResourcedo 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.