Você precisa construir sua própria autenticação para aplicativos?
Vi muitos desenvolvedores fazendo perguntas como "Devo construir minha autenticação para meu aplicativo?". Enquanto a resposta não pode ser simplesmente "Sim" ou "Não", gostaria de escrever um artigo para dividir a implementação e demonstrar os prós e contras para ajudá-lo a decidir.
Contexto
Vi muitos desenvolvedores fazendo perguntas como "Devo construir minha autenticação para meu aplicativo?". Enquanto a resposta não pode ser simplesmente "Sim" ou "Não", gostaria de escrever um artigo para dividir a implementação e demonstrar os prós e contras para ajudá-lo a decidir.
TL;DR É necessário encontrar uma solução existente que se adeque às suas necessidades, a menos que você realmente queira controle total ou ainda esteja aprendendo desenvolvimento de software.
Introdução
Como desenvolvedor, construí muitos aplicativos ao longo da minha carreira. Independentemente da linguagem de programação, há uma base comum que sempre preciso construir: autenticação de usuário.
Era uma parte negligenciável, pois tudo era direto há 20 anos:
- Implementar um sistema de registro e login com nome de usuário e senha.
- Criar um mecanismo para manter a sessão do usuário.
- Sobre segurança? MD5 é a resposta.
Era isso. Então eu pude focar no "negócio real". Não ouviu falar sobre MD5? Você perdeu os "bons tempos" do desenvolvimento de software. Hoje em dia, os desenvolvedores enfrentam mais desafios ao construir o login/registro.
Pode parecer alarmista, mas deixe-me explicar com um exemplo.
Exemplo: Uma livraria online
Vamos dizer que você está tentando construir uma livraria online com um serviço de API e um aplicativo frontal da web.
Primeiro, o escopo de "autenticação" deve ser definido. Autenticação pode ser explicada como autenticação e autorização, e elas têm definições e casos de uso totalmente diferentes:
Eu escrevi um artigo CIAM 101: Autenticação, Identidade, SSO para discutir esses conceitos em detalhes.
Escolha os métodos de autenticação
Vamos começar com a "autenticação", que é o login do usuário em nosso exemplo. Além do método de nome de usuário e senha, aqui estão alguns métodos populares que as pessoas estão adotando para uma melhor conversão do usuário e segurança:
- Sem senha, ou seja, código de verificação dinâmico (via e-mail ou sms)
- Entrar com redes sociais (Google, Facebook, etc.)
A escolha do método depende da decisão comercial, enquanto podemos dar uma olhada no esforço técnico:
- Para sem senha, você precisa encontrar um fornecedor para enviar códigos de verificação via email ou sms; em seguida, integre com seu serviço de API (novas APIs podem ser necessárias).
- Para o login social, você deve seguir as diretrizes de integração do(s) provedor(es) de identidade social que deseja usar. Além disso, você deve criar um mapeamento entre os IDs de usuário da sua livraria e do provedor de identidade.
- Por exemplo, quando um usuário faz login com uma conta do Gmail
[email protected]
, você pode vincular este endereço de email ao usuáriofoo
na livraria. Este processo ajuda você a construir um sistema de identidade unificado e permite que o usuário modifique ou desvincule sua identidade social no futuro.
- Por exemplo, quando um usuário faz login com uma conta do Gmail
Desenho e implementação da experiência de login
Depois de decidir os métodos de autenticação, uma experiência de login suave e agradável para seus usuários finais é o próximo alvo. A conversão aqui é fundamental, mas crucial para o negócio, pois é uma maneira natural de deixar os dados do cliente persistirem.
Quando eu trabalhava para o Airbnb, havia uma equipe inteira dedicada a otimizar a experiência de login para várias plataformas. Eles conduziram numerosos testes A/B para determinar qual combinação tinha a maior taxa de conversão.
Não é prático fazer isso quando um negócio está começando. Mas ainda precisamos tentar ao máximo acertar cada detalhe. Em quais plataformas você gostaria de executar a livraria? Você pode começar com celular, web ou ambos. O design exato dependerá dos métodos de autenticação que você escolher:
- Nome de usuário e senha: O mais fácil, apenas algumas caixas de entrada e botões.
- Sem senha: Insira o telefone / email, depois envie e verifique um código dinâmico.
- Login social: Leia a documentação do provedor de identidade social escolhido, siga as orientações visuais, manipule a lógica de redirecionamento e, finalmente, vincule a identidade social à identidade da livraria.
Mais coisas a considerar para melhorar:
- Você precisa combinar os processos de entrada e registro para um método específico?
- Você precisa de um fluxo "esqueci minha senha" para permitir que os clientes redefinam suas senhas independentemente?
Se você optar pelo desenvolvimento nativo, a carga de trabalho quase dobrará para uma plataforma adicional.
Segurança e troca de token
A segurança pode ser um iceberg escondido. Será ótimo se você estiver familiarizado com OpenID Connect ou OAuth 2.0, pois eles são amplamente usados e testados. OpenID Connect é relativamente novo, mas foi projetado para "autenticação de usuário", que é um excelente ajuste para uma livraria online.
Sem entrar em detalhes sobre os padrões, ainda existem algumas coisas a considerar:
- Qual método de criptografia deve ser usado para senhas?
- Qual é o processo de autenticação e autorização padrão?
- Como funciona a troca de token (Token de Acesso, Token de Atualização, Token de ID, etc.)?
- Como as chaves de assinatura podem ser usadas em tokens e como a assinatura pode ser validada para proteger os recursos?
- Como prevenir ataques de cliente e servidor?
Finalmente, você pode proporcionar uma boa experiência de login e entregá-la aos seus clientes.
Modelo de autorização
Como uma livraria, você precisa separar recursos para clientes e vendedores. Por exemplo, os clientes podem navegar por todos os livros, enquanto os vendedores podem gerenciar seus livros à venda. Está OK começar com verificações de if-else simples; no entanto, à medida que o negócio cresce, você pode precisar usar um modelo mais flexível, como Controle de Acesso Baseado em Função (RBAC) ou Controle de Acesso Baseado em Atributo (ABAC).
Eu também escrevi um artigo CIAM 102: Autorização e Controle de Acesso Baseado em Função para demonstrar conceitos básicos de autorização e o modelo RBAC.
Tomar a decisão
Você pode ver que a autenticação não é um problema de "tudo ou nada", uma vez que envolve múltiplos componentes técnicos e você ou sua equipe podem ter diferentes experiências técnicas nessas áreas. É importante dividi-lo em partes menores para ter uma melhor compreensão do status quo.
Para tomar a decisão, farei a mim mesmo as seguintes perguntas:
- Quão urgente é o projeto?
- Quanto esforço eu espero colocar na autenticação versus o negócio?
- Qual é a prioridade da experiência do usuário, segurança e manutenção?
- De qual(is) parte(s) preciso ter controle total? Quão familiarizado devo me tornar com eles?
- Se eu escolher alguns frameworks / soluções, eles são bons o suficiente para personalização ou extensão?
- Se o negócio crescer, vou precisar introduzir um novo modelo de autenticação?
- Se eu encontrar um fornecedor adequado, é seguro o suficiente para usar? Preciso de um plano de retirada se algo acontecer com o fornecedor?
Com as perguntas em mente, descobri dois fatos:
- Criar um sistema de autenticação confiável é altamente complexo.
- Os fornecedores existentes não podem atender a todos os critérios necessários.
Então eu decidi começar um projeto dedicado (Logto) para autenticação, e abraçar a comunidade de código aberto desde o primeiro dia.
Espero que este artigo ajude.