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

Logto x Hasura: Use JWT para controle de acesso

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

Darcy Ye
Darcy Ye
Developer

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

Geralmente, os usuários do Hasura utilizam outros serviços de gerenciamento de identidades e autenticação, sendo o Logto um dos mais populares entre eles.

Neste post do blog, assumimos que você já está usando os serviços do Hasura. Vamos apresentar como integrar Hasura e Logto para maximizar a segurança dos seus dados. Se você não tem uma conta no Logto, cadastre-se e comece a usá-la agora!

Contexto

O Hasura emprega gerenciamento de acesso baseado em funções, enquanto o Logto utiliza o padrão controle de acesso baseado em funções (RBAC).

No modelo de Logto e nas melhores práticas de RBAC, aconselhamos os usuários a usar scope para corresponder à granularidade mais fina das permissões, usar role como um conjunto de scopes para operações de lote convenientes e, por fim, verificar scope (geralmente do lado dos provedores de recursos) para verificar se um usuário pode realizar uma ação específica.

No Hasura, um role corresponde à granularidade mais fina das permissões, e as verificações de permissão são realizadas contra roles. Portanto, durante a configuração do Logto, recomendamos mapear um role para exatamente um scope. Esta abordagem pode ligar as permissões do Logto e Hasura juntas para evitar confusão e mau uso.

O Hasura pode suportar o controle de acesso usando Webhooks ou JWT. Nosso post anterior introduziu como usar Webhooks, e nas seções seguintes, explicaremos como utilizar o controle de acesso no modo JWT do Hasura.

Para começar

Vamos começar com um exemplo simples. Suponha que um usuário já tenha duas APIs no Hasura, GET /user e PATCH /user, correspondendo a dois papéis: user:reader e user:maintainer, respectivamente.

1. Criar recurso de API Hasura no Logto

Crie um recurso de API Hasura no Logto.

API Hasura

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

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

API Hasura com scopes

Papel de leitor de usuário

Papel de mantenedor de usuário

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

Analisando as opções de configuração JWT do Hasura, precisamos adicionar e configurar a variável de ambiente HASURA_GRAPHQL_JWT_SECRET antes que possamos usar JWT para controle 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. Este valor pode ser obtido a partir do endpoint de configuração OpenID do seu Logto (https://your.logto.domain/oidc/.well-known/openid-configuration).

Configuração JWT do Hasura

4. Personalizar as claims extras no token de acesso do usuário

Usando o recurso Custom JWT do Logto, personalize a lógica para adicionar claims extras ao token de acesso no formato JWT do usuário.

Script do token de acesso do usuário

Personalize o método getCustomJwtClaims para adicionar dados no JWT dos quais o Hasura depende para implementar o controle de acesso. Isso pode incluir dados relacionados ao usuário sendo autorizado naquele instante, incluindo roles que possuem, os quais podem ser acessados por meio de context.

Também definimos uma variável de ambiente USER_DEFAULT_ROLE_NAMES para evitar hardcode.

5. Integrar o SDK do Logto

Após configurar o Logto e o Hasura, integre seu aplicativo ao SDK do Logto. Aqui usamos um exemplo Next para visualizar o token de acesso de usuário emitido pelo Logto após o login do usuário.

Usuário com papéis

Primeiro, atribuímos os papéis user:reader e user:maintainer previamente criados ao usuário, e depois fazemos login como esse usuário.

Obtenha o token de acesso do usuário e solicite as APIs do Hasura:

Conclusão

Neste artigo, fornecemos outro método de controle de acesso baseado em JWT suportado pelo Hasura, além do Webhook.

Comparando os processos do Webhook e do JWT para controle de acesso do Hasura, podemos ver que a abordagem Webhook envia um Webhook para o Logto e aguarda uma resposta com cada solicitação ao Hasura; enquanto a abordagem baseada em JWT pode ser usada continuamente até que o JWT expire.

A abordagem JWT pode reduzir a carga de rede e eliminar a latência de rede trazida pelos Webhooks; enquanto isso, a abordagem Webhook pode sincronizar alterações nas permissões de usuários em tempo real.

Os usuários podem escolher a abordagem adequada com base nessas conclusões, combinadas com suas necessidades de negócios reais.