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.
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.
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.
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).
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.
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.
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.