Como usamos pouco código, Keycloak e GraphQL em vez de Okta
Oportunidade
A USH é uma federação de federações que fornece serviços de suporte central a seus membros. Eles fornecem infraestrutura de SSO e IAM para mais de 20.000 usuários. O Okta era muito caro e a USH precisava gerenciar de forma centralizada o CRUD das contas de usuário e propagar esses usuários para vários outros aplicativos: CRM, Active Directory, LDAP, site do Drupal, JIRA, ativação de licenças do Microsoft Office e alguns outros aplicativos internos.
Solução
O Keycloak é usado como IAM, muito fácil de integrar, criamos uma camada de middleware usando o Apollo GraphQL, que fornece um único ponto de extremidade de gráfico para todas as operações relacionadas a usuários e, por fim, um belo aplicativo front-end WeWeb foi criado para fornecer um portal unificado para criar, atualizar ou desativar usuários.
Keycloak + GraphQL + WeWeb
Gerenciar mais de 20.000 usuários é sempre um desafio, especialmente quando eles fazem parte de centenas de organizações diferentes e seus dados estão espalhados por vários aplicativos. Normalmente, vemos esses problemas serem resolvidos com uma combinação de soluções de AD e IAM, como o Okta. No entanto, o preço da Okta é voltado para empresas, e ter 20.000 usuários geralmente implica uma empresa muito grande com um orçamento substancial.
A USH, por outro lado, é uma federação sem fins lucrativos que fornece serviços centralizados para seus membros, onde a Okta seria proibitivamente cara. Criamos uma solução mais elegante. O gerenciamento de usuários foi baseado no Keycloak, um IAM de código aberto. Adicionamos uma camada GraphQL sobre o Keycloak para gerenciar os usuários e seus dados. Os resolvedores do GraphQL se conectaram a várias APIs de back-end em que partes dos dados do usuário estavam localizadas: CRM, Drupal, LDAP e outras em que as ações eram necessárias na criação ou arquivamento do usuário, como conceder acesso ao JIRA, ativar licenças do Microsoft Office e gerenciar assinaturas de boletins informativos.
Por fim, criamos um front-end usando o WeWeb. Aproveitamos a facilidade de conectar o GraphQL ao WeWeb e desenvolvemos um conjunto de telas para criar, atualizar, alterar e-mails e atributos de usuários existentes e arquivar aqueles que saíram, desativando-os em cada aplicativo.
Não é tão fácil quanto parece
No papel, pode parecer simples: escreva alguns resolvedores com o Apollo GraphQL, conecte algumas APIs, crie de três a quatro telas no WeWeb e pronto. Mas, na realidade, trata-se de um sistema altamente distribuído que envolve a orquestração e a sincronização de dados em dez aplicativos diferentes. Uma pequena alteração ou erro pode desestabilizar todo o sistema. A depuração era um verdadeiro pesadelo; podíamos passar várias horas investigando uma pequena alteração em um atributo de campo que derrubava todo o fluxo de trabalho de criação de usuários. Precisávamos urgentemente de uma solução para evitar gastar muito tempo no projeto.
Para resolver isso, primeiro implementamos um sistema de registro global usando o Datadog. Também cobrimos a maioria das jornadas do usuário com testes automatizados de ponta a ponta. Essas medidas aceleraram imediatamente o projeto, e agora podemos executar e implementar alterações em poucos minutos.
Além disso, queremos enfatizar a importância da comunicação eficaz entre as equipes do departamento de TI da USH, dos integradores do Keycloak e dos gerentes de diferentes aplicativos. Um único JIRA, Slack e GIT foram estabelecidos, com reuniões regulares no local organizadas para alinhar todos e se preparar para lançamentos futuros.