$30 off During Our Annual Pro Sale. View Details »

Autenticação & Autorização de pessoas usuárias @ Trybe

Matheus
October 01, 2022

Autenticação & Autorização de pessoas usuárias @ Trybe

Essa palestra define os conceitos de autenticação e autorização e mostra como estamos resolvendo estes problemas na Trybe.

Palestra apresentada na GopherCon Brasil de 2022

Matheus

October 01, 2022
Tweet

More Decks by Matheus

Other Decks in Programming

Transcript

  1. Autenticação & Autorização de pessoas usuárias @ Trybe

  2. $ whoami

  3. • Mineiro • Engenheiro de Software @ Trybe • 10+

    anos xp • Tentando ser fi tness • @mfbmina
  4. $ cat not_included.txt

  5. • Feature fl ags / feature switches / feature toggles

    • Autenticação & autorização entre serviços
  6. $ man authentication

  7. De fi ne como a pessoa entra em seu sistema

    Autenticação é validar a autenticidade de um usuário
  8. None
  9. $ man authorization

  10. De fi ne os papéis e privilégios de determinada pessoa

    Autorização é permitir um usuário executar determinada ação
  11. • Administrador & Usuário • Professor & estudante • Usuários

    de leitura & usuário de escrita
  12. $ diff authentication authorization

  13. • Autenticação valida a identidade • Autorização valida os papéis

    de uma identidade
  14. $ man trybe

  15. • Escola de tecnologia orientada para o desenvolvimento de uma

    carreira • >400k usuários • Lock-in vendor • Não existia de fi nir papeis claros entre os tipos de usuários • Controle de acesso distribuído entre apps
  16. $ man componentes • Apigateway • Aplicação • Serviço de

    autorização • Serviço de autenticação
  17. $ man apigateway • Trae fi k • Recebe toda

    requisição para dentro da infraestrutura • Responsável por decidir qual aplicação deve responder a requisição • Responsável por checagens intermediárias (ex: CORS)
  18. $ man app • React + JS / TS •

    Elixir + Phoenix • Postgres
  19. $ go --help

  20. • Facilidade de uso • Documentação abrangente • Performance •

    Segurança • Builds
  21. $ go run authorization/main.go

  22. $ man authorization_service • App escrita em Go • Centralizar

    o controle de acesso • Veri fi ca a autenticidade da identidade da pessoa usuária • Veri fi ca se o usuário tem a permissão necessária para a rota desejada
  23. $ cat challenges.txt • Centralizar o controle de acesso •

    Adoção fácil entre as equipes • Não deve impactar a performance e a experiência do usuário
  24. None
  25. $ cat adoption.txt • Envolvemos as equipes no processo de

    construção • Processo simples e bem documentado • Ajuda e exemplos
  26. None
  27. $ cat performance.txt • Concorrência • Benchmark de código •

    Benchmark da solução • Dashboards • Monitoramento
  28. $ man concurrency

  29. None
  30. None
  31. $ go test -bench=.

  32. None
  33. None
  34. $ ./app_benchmark

  35. • Siege (https://github.com/JoeDog/siege) • Fornece arquivo de URLs a serem

    acessadas • Permite con fi gurar quantidade de conexões concorrentes • Testes feitos com 1x, 1,5x, 2x, 10x, 100x carga atual
  36. $ grep *.dashboard

  37. None
  38. $ cat monitoring.txt

  39. • Sentry • Alertas con fi gurados pela infra •

    APMs
  40. $ cat problems.txt • Ponto único de falha • Tempo

    de resposta
  41. $ go run authentication/main.go

  42. $ man authentication_service • App escrita em Go • Responsável

    por se comunicar com os provedores de identidade • Gera & valida token de usuário • Guarda as papéis (roles) existentes • Guarda as associações entre usuário e papéis (roles)
  43. $ cat motivations.txt • Custo • Acabar com o vender

    lock-in • Centralizar interações com o provedor de identidade
  44. $ cat challenges.txt • Chamadas espalhadas pelo monolito • Começando

    a se espalhar pelos microserviços • Códigos dentro do provedor de identidade • Emails e con fi gurações dentro do provedor de identidade • Con fi gurações diferentes entre ambientes • Alterar tudo sem afetar a experiência das pessoas usuárias
  45. $ cat plan.txt 1. Estudo sobre as opções de provedores

    de identidade 2. Levantamento sobre quais aplicações estão se comunicando com o provedor antigo e como estão se comunicando. 3. Criação do novo serviço 4. Centralização das chamadas no novo serviço 5. Duplicar todas as funcionalidades que utilizamos do provedor antigo para o novo 6. Migrar os usuários do antigo para o novo 7. Passar a utilizar utilizar o novo em 100%
  46. None
  47. $ cat learnings.txt • Estudo e planejamento são essenciais •

    Não subestime a complexidade do desa fi o • Documentação sempre vai ser útil no futuro • Isolar e centralizar cedo evitou retrabalho • …
  48. Perguntas? Muito obrigado!

  49. @mfbmina