Como Construir um Aplicativo de Autenticação Full-Stack

Bobur Umurzokov

Bobur Umurzokov

August 24, 2023

Technology

A maioria das aplicações web precisa de um recurso de cadastro e login. Mas para iniciantes, isso pode ser desafiador. Até mesmo desenvolvedores experientes preferem usar serviços externos para lidar com a autenticação desde o início. Quando falamos sobre um fluxo de autenticação full-stack, significa configurar o login e o registro de usuários no frontend e também proteger a API do backend. Portanto, você precisa trabalhar em ambas as partes.

Este post vai guiá-lo na construção de um aplicativo de autenticação full-stack com Apache APISIX, Authgear e OpenID Connect (OIDC). Você pode encontrar o código-fonte do projeto no GitHub. Para um início rápido com o aplicativo, basta clonar o repositório e executar o exemplo de código, seguindo as etapas fornecidas no arquivo README.md.

Objetivo de aprendizagem

Este conteúdo tem como objetivo mostrar a todos como configurar a autenticação tanto no backend quanto no frontend. Além disso, ele foi projetado para ajudar tanto iniciantes quanto desenvolvedores experientes que desejam se tornar desenvolvedores full-stack.

O papel do APISIX, Authgear e OIDC na autenticação

Antes de mergulhar no guia, vamos apresentar brevemente as ferramentas que usaremos.

  • OIDC (OpenID Connect) é uma camada de identidade simples construída sobre o protocolo OAuth 2.0. Ele permite que aplicativos de terceiros verifiquem usuários e obtenham informações básicas de perfil de maneira padronizada.

  • APISIX se destaca como um dos gateways de API de código aberto mais populares. Ele foi projetado não apenas para o gerenciamento de APIs, mas também para garantir a segurança e proteção dessas APIs. Uma das características mais proeminentes em seu arsenal de segurança é o suporte para OIDC usando seu plugin.

  • Authgear é uma plataforma de identidade como serviço (IDaaS) altamente adaptável para aplicativos web e móveis. Seus usuários podem fazer login no seu aplicativo por meio de uma interface de usuário integrada (você não precisa construir uma interface para o fluxo de registro e login dos usuários), que oferece uma experiência de login segura e baseada em padrões, que você pode personalizar com sua própria marca e vários métodos de autenticação, como e-mail, logins sociais, autenticação sem senha, logins biométricos, senha de uso único (OTP) com SMS/WhatsApp e autenticação multifator (MFA). Ele usa OpenID Connect (OIDC) e OAuth 2.0 para identificar quem é um usuário e conceder autorização para recursos protegidos.

O fluxo de autenticação

Aqui está um diagrama arquitetônico de alto nível de como o processo de autenticação se parece:

O fluxo de autenticação com OIDC, APISIX e Authgear

As etapas mostradas no diagrama são explicadas em detalhes abaixo:

No diagrama acima, o Cliente é qualquer aplicação web, o Gateway de API é o APISIX, o Provedor de Identidade é o Authgear e o Upstream é uma API de backend.

  1. Um aplicativo web pode assumir várias formas, desde Aplicativos de Página Única (SPA) construídos com React, Vue ou Angular, até aplicativos web padrão criados usando frameworks como Express, NextJS e plataformas semelhantes. O aplicativo web é nosso aplicativo cliente com frontend que envia uma solicitação para um Provedor de Identidade (Authgear) com um ID do cliente e um segredo do cliente para coletar um token de acesso como JSON Web Tokens (JWT).
  2. Se as credenciais fornecidas estiverem corretas, o Authgear responde com um token JWT para o aplicativo web. Você pode criar quantos usuários quiser para o seu aplicativo no portal do Authgear e os usuários podem fazer login usando páginas de UI hospedadas pelo Authgear.
  3. Após obter o token JWT, o cliente envia uma solicitação para um Gateway de API (APISIX) com o token de acesso e as APIs de backend protegidas pelo gateway.
  4. Antes de processar a solicitação, o APISIX precisa garantir que o token fornecido seja válido, não tenha expirado e tenha os escopos corretos para os dados ou serviços solicitados. Se o APISIX não puder validar o token localmente, ele envia uma solicitação de introspecção do token para o servidor de autorização do Authgear. Essa solicitação é normalmente feita para o endpoint introspection do servidor.
  5. O Authgear recebe a solicitação de introspecção e a processa. O servidor verifica seus registros para determinar a validade do token, sua expiração e os escopos associados, e após determinar o estado do token, ele responde ao APISIX.
  6. Com base na resposta de introspecção do token do Authgear, o APISIX pode então tomar uma decisão informada. Se o token for válido, ele encaminha a solicitação para a API de backend, caso contrário, ele rejeita a solicitação do cliente com um código de status HTTP não autorizado.
  7. O APISIX envia a resposta da API de backend com os recursos solicitados.

Aplicativo de autenticação full-stack com APISIX, Authgear e OIDC.

Para o projeto de demonstração, usamos o Docker para instalar e executar 3 componentes (backend, Gateway de API e frontend) com um único comando. Empregamos ExpressJS para o aplicativo web frontend, hospedando nosso aplicativo de página única em localhost:3000. O Gateway APISIX pode ser acessado em localhost:9080, enquanto nossa API de backend (pode ser qualquer API que você construir usando Python, Java, NodeJS, etc.) está configurada em localhost:9081.

Pré-requisitos

Antes de começar, você precisará do seguinte:

  • Uma conta gratuita do Authgear. Cadastre-se se ainda não tiver uma.
  • Docker é usado para instalar todos os serviços.

Configurar o Authgear

Para usar os serviços do Authgear, você precisará configurar um aplicativo no Painel do Authgear e obter as informações do Cliente OIDC do Authgear. Essa configuração permite que os usuários no Authgear façam login no aplicativo web automaticamente após serem autenticados pelo Authgear.

Passo 1: Criar um aplicativo no Authgear

Para configurar o aplicativo, navegue até a Interface do Portal do Authgear e selecione Aplicativos na barra de navegação à esquerda. Use o seletor interativo para criar um novo Aplicativo Cliente OIDC do Authgear.

Criar um aplicativo no Authgear

Passo 2: Copiar as credenciais do aplicativo

Cada aplicativo no Authgear recebe um ID DO CLIENTE e um SEGREDO DO CLIENTE alfanuméricos e únicos que o código do seu aplicativo usará para chamar as APIs do Authgear no aplicativo web. Registre o EMISSOR do Authgear gerado (por exemplo, https://example-auth.authgear-apps.com), o ID DO CLIENTE e o SEGREDO DO CLIENTE da saída. Você usará esses valores na próxima etapa para a configuração do aplicativo web.

Copiar as credenciais do aplicativo

Passo 3: Configurar o URI de Redirecionamento

Um URI de Redirecionamento Autorizado do seu aplicativo é a URL para a qual o Authgear redirecionará após o usuário ter sido autenticado, para que o middleware OpenID Connect complete o processo de autenticação. No nosso caso, será a página inicial do nosso frontend e será executada em http://localhost:3000.

Defina o seguinte http://localhost:3000 no campo URIs de Redirecionamento Autorizados. ****Se não for definido, os usuários não serão retornados ao seu aplicativo após o login.

Passo 4: Habilitar o Token de Acesso

Além disso, habilite a opção Emitir JWT como token de acesso na seção Token de Acesso da configuração do aplicativo:

Habilitar Token de Acesso no Authgear

Passo 5: Escolher um método de login

Após criar o aplicativo Authgear, você escolhe como os usuários precisam autenticar na página de login. Na aba Autenticação, navegue até Métodos de Login, você pode escolher um método de login entre várias opções, incluindo por e-mail, celular ou social, apenas usando um nome de usuário ou o método personalizado que você especificar. Para esta demonstração, escolhemos a abordagem E-mail+Sem Senha, onde nossos usuários são solicitados a registrar uma conta e fazer login usando seus e-mails. Eles receberão uma senha de uso único (OTP) em seus e-mails e verificarão o código para usar o aplicativo.

Escolher um método de login

Configurar e executar o projeto de demonstração

Com o Authgear configurado com sucesso, agora podemos trazer o repositório do GitHub, configurar as variáveis de ambiente e executar os serviços:

Comece clonando o projeto na sua máquina local:

git clone https://github.com/Boburmirzo/apisix-authgear-oidc-full-stack-auth.git

Torne o diretório do projeto o seu diretório de trabalho atual:

cd apisix-authgear-oidc-full-stack-auth

No diretório raiz do seu projeto, onde está o arquivo yaml do Docker compose, crie um arquivo .env com as seguintes variáveis de ambiente:

CLIENT_ID={AUTHGEAR_APP_CLIENT_ID}
CLIENT_SECRET={AUTHGEAR_APP_CLIENT_SECRET}
ISSUER={AUTHGEAR_ISSUER}
REDIRECT_URI=http://localhost:3000

Substitua os valores entre colchetes pelos valores das configurações do seu aplicativo Authgear da seção Configurar o Authgear acima, como Emissor, ID do Cliente, Segredo do Cliente.

Após adicionar o arquivo de ambiente, execute o comando docker compose up a partir do diretório raiz.

Testar o fluxo de autenticação

Para a demonstração, usamos o Docker para instalar e executar 3 componentes (backend, Gateway de API e frontend) com um único comando. Empregamos o ExpressJS para o aplicativo web frontend, hospedando nosso aplicativo de página única em localhost:3000. O Gateway APISIX pode ser acessado em localhost:9080, enquanto nossa API de backend (pode ser qualquer API que você construir usando Python, Java, NodeJS, etc.) está configurada em localhost:9081.

Página de login do Authgear

Após se cadastrar usando seu e-mail, você receberá uma senha de uso único (OTP):

Receber uma senha de uso único

Depois de autenticado, você está autorizado a solicitar recursos da API e recebe uma resposta do serviço de backend:

Resposta do serviço de backend

O APISIX aplicou a autenticação OIDC com o Authgear e forneceu um fluxo de autenticação seguro e simplificado com configuração fácil.

Próximos passos

Essa combinação de ferramentas que usamos garantiu a segurança, permitindo que os desenvolvedores se concentrassem na lógica de negócios principal em vez das complexidades do processo de autenticação. A partir de agora, com o recurso de autenticação habilitado, você pode começar a construir sua interface para a página inicial, mostrar dados da API e desenvolver outras páginas.

Recursos relacionados

Política de Autorização do Apache APISIX: Proteja suas APIs

Configurar SSO com OIDC e Keycloak

Tags: