Criar um SDK baseado em Node.js para Logto em minutos
Aprenda a criar um SDK personalizado para Logto usando `@logto/node`.
Anteriormente neste artigo, criámos um SDK web para Logto em minutos. Agora, vamos focar em Node.js, outra plataforma popular para programadores de JavaScript.
Neste guia, vamos guiá-lo pelos passos para criar um SDK simples para Express usando @logto/node
. Este SDK irá implementar o fluxo de início de sessão, e você pode seguir os mesmos passos para criar um SDK para qualquer outra plataforma baseada em Node.js, como Koa, Next.js, NestJS, etc.
O fluxo de início de sessão
Antes de começarmos, vamos rever o fluxo de início de sessão no Logto. O fluxo de início de sessão compreende os seguintes passos:
- Redirecionar para Logto: O utilizador é redirecionado para a página de início de sessão do Logto.
- Autenticar: O utilizador insere as suas credenciais e autentica-se com o Logto.
- Redirecionar de volta para a sua aplicação: Após a autenticação bem-sucedida, o utilizador é redirecionado de volta para a sua aplicação com um código de autenticação.
- Troca de código: A sua aplicação troca o código de autenticação por tokens e armazena os tokens como o estado de autenticação.
Breve introdução ao @logto/node
Semelhante ao @logto/browser
, o pacote @logto/node
expõe uma classe LogtoClient
que fornece as funcionalidades principais do Logto, incluindo métodos para o fluxo de início de sessão:
signIn()
: Gera o URL de autenticação OIDC e redireciona para ele.handleSignInCallback()
: Verifica e analisa o URL de callback e extrai o código de autenticação, depois troca o código por tokens chamando o endpoint de tokens.getContext()
: Obtém o contexto do pedido atual com base no cookie de sessão, incluindo o estado de autenticação e as informações do utilizador.
Criando o SDK para Express
No SDK, iremos fornecer dois manipuladores de rotas (/sign-in
e /sign-in-callback
) junto com um middleware withLogto
:
/sign-in
: Um manipulador de rota que inicia o fluxo de início de sessão com uma resposta que redireciona para o URL de autenticação OIDC./sign-in-callback
: Um manipulador de rota que processa o URL de callback, troca o código de autenticação por tokens, armazena-os e completa o fluxo de início de sessão.withLogto
middleware: Um middleware que chamagetContext()
para obter o contexto do pedido atual, incluindo o estado de autenticação e as informações do utilizador.
Para usar o SDK, você pode simplesmente adicionar o middleware à sua app Express para proteger as rotas, e usar os manipuladores de rotas para iniciar o fluxo de início de sessão e lidar com o callback.
Passo 1: Instalar o pacote
Primeiro, instale o pacote @logto/node
usando o npm ou outro gestor de pacotes:
Passo 2: Preparar o adaptador de armazenamento
É necessário um adaptador de armazenamento para inicializar a instância do LogtoClient
.
Assumindo que o utilizador do SDK já configurou a sessão Express, podemos simplesmente implementar a classe Storage
criando um novo ficheiro storage.ts
:
Passo 3: Implementar os manipuladores de rotas
O pedido HTTP é sem estado, por isso precisamos de iniciar a instância do cliente para cada pedido. Vamos preparar uma função helper para criar a instância do cliente:
Nesta função, implementamos o adaptador navigate
juntamente com o adaptador ExpressStorage
. O adaptador navigate
é usado para redirecionar o utilizador para o URL de início de sessão.
A seguir, vamos implementar os manipuladores de rotas, envolvidos numa função handleAuthRoutes
:
- O manipulador da rota
/auth/sign-in
inicia o fluxo de início de sessão chamandosignIn()
, um estado de início de sessão é armazenado na sessão e será consumido pelo manipulador da rota/auth/sign-in-callback
. - O manipulador da rota
/auth/sign-in-callback
lida com o URL de callback e troca o código de autenticação por tokens chamandohandleSignInCallback()
, os tokens são armazenados na sessão pelo adaptadorExpressStorage
. Depois da troca estar concluída, o utilizador é redirecionado de volta para a página inicial.
Passo 4: Implementar o middleware
O middleware withLogto
é usado para proteger rotas. Ele chama getContext()
para obter o contexto do pedido atual, incluindo o estado de autenticação e as informações do utilizador.
A função getContext
usa o adaptador de armazenamento para obter os tokens da sessão.
Ponto de verificação: usando o SDK
Agora que você criou o SDK para Express do Logto, pode usá-lo na sua aplicação adicionando o middleware para proteger rotas e utilizando os manipuladores de rotas para iniciar o fluxo de início de sessão e lidar com o callback.
Aqui está um exemplo simples de como usar o SDK na sua aplicação Express:
Neste exemplo, usamos o middleware withLogto
para verificar o estado de autenticação e redirecionar o utilizador para a página de início de sessão se não estiver autenticado, caso contrário, exibimos uma mensagem de boas-vindas.
Você pode verificar o projeto de exemplo oficial do Express aqui.
Conclusão
Neste guia, passámos pelos passos para criar um SDK para Express do Logto implementando o fluxo de autenticação básico. O SDK fornecido aqui é um exemplo básico. Você pode expandi-lo adicionando mais métodos e funcionalidades para atender às necessidades da sua aplicação.
Você pode seguir os mesmos passos para criar um SDK para qualquer outra plataforma baseada em JavaScript que corra em Node.js.
Recursos: