Português (Portugal)
  • hasura
  • restful api
  • graphql
  • logto
  • jwt personalizado
  • controlo de acesso
  • autorização

Logto x Hasura: Usar JWT para controlo de acesso

Este guia abrangente descreve os passos envolvidos na integração do Logto com o modo de controlo de acesso JWT da Hasura, fortalecendo efetivamente a segurança dos dados.

Darcy Ye
Darcy Ye
Developer

Hasura é uma ferramenta que pode fornecer rapidamente APIs GraphQL e REST correspondentes aos teus dados. Considerando a segurança dos dados, a Hasura também oferece a capacidade de ajustar o controlo de acesso para cada API diferente.

Normalmente, os utilizadores da Hasura utilizam outros serviços de gestão de identidade e autenticação, sendo o Logto um deles muito popular.

Neste post de blog, iremos assumir que já estás a usar serviços da Hasura. Vamos introduzir como integrar a Hasura e o Logto para maximizar a segurança dos teus dados. Se não tens uma conta Logto, inscreve-te e começa a utilizá-la agora!

Contexto

A Hasura utiliza a gestão de acesso baseada em papéis, enquanto o Logto utiliza o padrão controlo de acesso baseado em papéis (RBAC).

No modelo e nas melhores práticas do RBAC do Logto, aconselhamos os utilizadores a usarem scope para corresponder à granularidade mais fina de permissões, usarem role como um conjunto de scopes para operações em lote convenientes e, por fim, verificarem scope (geralmente no lado dos fornecedores de recursos) para confirmar se um utilizador pode realizar uma operação específica.

Na Hasura, um role corresponde à granularidade mais fina de permissões, e as verificações de permissões são feitas contra os roles. Portanto, durante a configuração do Logto, recomendamos mapear um role a um scope exato. Esta abordagem pode ligar as permissões do Logto e da Hasura para evitar confusões e usos indevidos.

A Hasura pode suportar controlo de acesso usando Webhooks ou JWT. O nosso post de blog anterior introduziu como usar Webhooks, e nas secções seguintes, iremos explicar como utilizar o controlo de acesso em modo JWT da Hasura.

Começar

Vamos começar com um exemplo simples. Suponhamos que um utilizador já tenha duas APIs na Hasura, GET /user e PATCH /user, correspondentes a dois papéis: user:reader e user:maintainer, respetivamente.

1. Criar recurso API Hasura no Logto

Cria um recurso API Hasura no Logto.

Hasura API

2. Criar papéis de acordo com a configuração da Hasura no Logto

Precisamos de criar dois scopes para o recurso API Hasura mencionado no passo 1, nomeadamente read:user e maintain:user, e depois criar dois papéis: user:reader (contendo o read:user scope) e user:maintainer (incluindo o maintain:user scope) para corresponder um-a-um com os papéis da Hasura. E atribuir estes papéis aos utilizadores do Logto conforme necessário.

Hasura API com scopes

Papel de leitor do usuário

Papel de mantenedor do usuário

3. Configurar a variável de ambiente HASURA_GRAPHQL_JWT_SECRET da Hasura para ativar o modo JWT

Ao olhar para as opções de configuração JWT da Hasura, precisamos adicionar e configurar a variável de ambiente HASURA_GRAPHQL_JWT_SECRET antes de podermos usar JWT para controlo de acesso.

Existem muitas opções diferentes que podem ser configuradas, mas aqui introduzimos o caso mais simples: apenas o jwk_url precisa ser configurado. Esse valor pode ser obtido do endpoint de configuração OpenID do teu Logto (https://your.logto.domain/oidc/.well-known/openid-configuration).

Configuração JWT da Hasura

4. Personalizar reivindicações extra do token de acesso do utilizador

Usando a funcionalidade de JWT personalizado do Logto, personaliza a lógica para adicionar reivindicações extras ao token de acesso do utilizador no formato JWT.

Script do token de acesso do usuário

Personaliza o método getCustomJwtClaims para adicionar dados no JWT dos quais a Hasura depende para implementar controlo de acesso. Isso pode incluir dados relacionados ao utilizador a ser autorizado durante essa instância, incluindo os roles que ele possui, que podem ser acessados através do context.

Também definimos uma variável de ambiente USER_DEFAULT_ROLE_NAMES para evitar codificação rígida.

5. Integrar SDK Logto

Depois de configurar o Logto e a Hasura, integra a tua aplicação com o SDK do Logto. Aqui usamos um exemplo em Next para pré-visualizar o token de acesso do utilizador emitido pelo Logto após o login do utilizador.

Usuário com papéis

Primeiro, atribuímos os papéis user:reader e user:maintainer criados anteriormente ao utilizador, e depois fazemos o login como esse utilizador.

Obter o token de acesso do utilizador e solicitar APIs da Hasura:

Conclusão

Neste artigo, fornecemos outro método de controlo de acesso baseado em JWT suportado pela Hasura, além de Webhook.

Comparando os processos de controlo de acesso da Hasura via Webhook e JWT, podemos ver que a abordagem via Webhook envia um Webhook para o Logto e aguarda uma resposta com cada pedido da Hasura; enquanto a abordagem baseada em JWT pode ser usada continuamente até o JWT expirar.

A abordagem JWT pode reduzir a carga na rede e eliminar a latência de rede trazida pelos Webhooks; enquanto isso, a abordagem via Webhook pode sincronizar mudanças nas permissões do utilizador em tempo real.

Os utilizadores podem escolher a abordagem mais adequada com base nestas conclusões, combinada com as suas necessidades reais de negócio.