Français
  • hasura
  • api restful
  • graphql
  • logto
  • jwt personnalisé
  • contrôle d'accès
  • autorisation

Logto x Hasura : Utiliser JWT pour le contrôle d'accès

Ce guide complet décrit les étapes impliquées dans l'intégration de Logto avec le mode de contrôle d'accès JWT de Hasura, renforçant ainsi efficacement la sécurité des données.

Darcy Ye
Darcy Ye
Developer

Hasura est un outil qui peut rapidement fournir des API GraphQL et REST correspondant à vos données. En tenant compte de la sécurité des données, Hasura offre également la possibilité de peaufiner le contrôle d'accès pour chaque API différente.

En général, les utilisateurs d'Hasura utilisent d'autres services de gestion des identités et d'authentification, Logto étant très populaire parmi eux.

Dans cet article de blog, nous supposerons que tu utilises déjà les services Hasura. Nous présenterons comment intégrer Hasura et Logto pour maximiser la sécurité de tes données. Si tu n'as pas de compte Logto, inscris-toi et commence à l'utiliser maintenant !

Contexte

Hasura utilise la gestion des accès basée sur les rôles, tandis que Logto utilise la Gestion des accès basée sur les rôles (RBAC) standard.

Dans le modèle RBAC et les meilleures pratiques de Logto, nous conseillons aux utilisateurs d'utiliser scope pour correspondre à la moindre granularité des permissions, d'utiliser role comme un lot de scopes pour des opérations par lots pratiques, et finalement de vérifier scope (généralement du côté des fournisseurs de ressources) pour vérifier si un utilisateur peut effectuer une opération spécifique.

Dans Hasura, un role correspond à la moindre granularité des permissions, et les vérifications des permissions sont effectuées contre les roles. Par conséquent, lors de la configuration de Logto, nous recommandons de mapper un role à exactement un scope. Cette approche peut lier les permissions de Logto et Hasura pour éviter la confusion et les mauvaises utilisations.

Hasura peut prendre en charge le contrôle d'accès en utilisant des Webhooks ou JWT. Notre précédent article de blog a présenté comment utiliser les Webhooks, et dans les sections suivantes, nous expliquerons comment utiliser le mode de contrôle d'accès JWT de Hasura.

Commencer

Commençons par un exemple simple. Supposons qu'un utilisateur ait déjà deux API dans Hasura, GET /user et PATCH /user, correspondant respectivement à deux rôles : user:reader et user:maintainer.

1. Créer une ressource API Hasura dans Logto

Créer une ressource API Hasura dans Logto.

API Hasura

2. Créer des rôles selon la configuration Hasura dans Logto

Nous devons créer deux scopes pour la ressource API Hasura mentionnée à l'étape 1, à savoir read:user et maintain:user, puis créer deux rôles : user:reader (contenant le scope read:user) et user:maintainer (inclus le scope maintain:user) pour correspondre un à un avec les rôles d'Hasura. Et assigner ces rôles aux utilisateurs de Logto selon les besoins.

API Hasura avec scopes

Rôle lecteur utilisateur

Rôle mainteneur utilisateur

3. Configurer la variable d'environnement HASURA_GRAPHQL_JWT_SECRET pour activer le mode JWT

En consultant les options de configuration JWT de Hasura, nous devons d'abord ajouter et configurer la variable d'environnement HASURA_GRAPHQL_JWT_SECRET avant de pouvoir utiliser JWT pour le contrôle d'accès.

Il existe de nombreuses options différentes qui peuvent être configurées, mais ici nous introduisons le cas le plus simple : seul le jwk_url doit être configuré. Cette valeur peut être obtenue à partir du point de terminaison de configuration OpenID de ton Logto (https://your.logto.domain/oidc/.well-known/openid-configuration).

Config JWT Hasura

4. Personnaliser les revendications supplémentaires du jeton d'accès utilisateur

En utilisant la fonction Custom JWT de Logto, personnalise la logique pour ajouter des revendications supplémentaires au jeton d'accès utilisateur au format JWT.

Script jeton d'accès utilisateur

Personnalise la méthode getCustomJwtClaims pour ajouter des données dans le JWT sur lesquelles Hasura s'appuie pour mettre en œuvre le contrôle d'accès. Cela peut inclure des données liées à l'utilisateur qui est autorisé à ce moment-là, y compris les roles qu'il possède, qui peuvent être accessibles via context.

Nous avons également défini une variable d'environnement USER_DEFAULT_ROLE_NAMES pour éviter le codage en dur.

5. Intégrer le SDK Logto

Après avoir configuré Logto et Hasura, intègre ton application avec le SDK Logto. Ici, nous utilisons un exemple Next pour prévisualiser le jeton d'accès utilisateur émis par Logto après l'authentification de l'utilisateur.

Utilisateur avec rôles

Tout d'abord, nous attribuons les rôles user:reader et user:maintainer créés précédemment à l'utilisateur, puis nous nous connectons en tant que cet utilisateur.

Obtenir le jeton d'accès utilisateur et envoyer des requêtes aux APIs Hasura:

Conclusion

Dans cet article, nous fournissons une autre méthode de contrôle d'accès basée sur JWT soutenue par Hasura, en dehors du Webhook.

En comparant les processus de contrôle d'accès Webhook et JWT d'Hasura, nous pouvons voir que l'approche Webhook envoie un Webhook à Logto et attend une réponse pour chaque requête Hasura ; alors que l'approche basée sur JWT peut être utilisée en continu jusqu'à l'expiration du JWT.

L'approche JWT peut réduire la charge réseau et éliminer la latence réseau apportée par les Webhooks ; en même temps, l'approche Webhook peut synchroniser les changements dans les permissions des utilisateurs en temps réel.

Les utilisateurs peuvent choisir l'approche appropriée sur la base de ces conclusions, combinée à leurs besoins commerciaux réels.