Aller au contenu principal

Mettre en place l’autorisation avec Permit.io

Permit.io est une plateforme d’autorisation qui fournit un contrôle d’accès granulaire pour les applications. Vous pouvez utiliser Logto conjointement avec Permit.io pour gérer l’authentification et l’autorisation des utilisateurs.

astuce:

Pour comprendre les différences clés entre authentification et autorisation, consultez Authentification vs. autorisation.

Ce guide vous montrera comment connecter Logto avec Permit.io pour mettre en œuvre l’autorisation dans votre application.

Prérequis

Intégration

Installer le SDK Permit.io

Ajoutez le SDK Permit.io à votre application :

npm install permitio

Créer un projet Permit.io

  1. Inscrivez-vous pour un compte gratuit sur permit.io
  2. Créez un nouveau projet et obtenez votre clé API
  3. Ajoutez la clé API à vos variables d’environnement :
PERMIT_API_KEY=your-permit-api-key

Configurer le client Permit.io

Créez un fichier pour gérer l’intégration Permit.io :

// libraries/permit.js
const { Permit } = require('permitio');

// Initialisez le client Permit.io
const permit = new Permit({
pdp: 'https://cloudpdp.api.permit.io',
token: 'your-permitio-api-key',
});

// Synchronisez un utilisateur avec Permit.io
export const syncUserToPermit = async (userId, email, firstName, lastName, role = 'viewer') => {
// D’abord, synchronisez l’utilisateur
await permit.api.syncUser({
key: userId,
email: email || undefined,
first_name: firstName || undefined,
last_name: lastName || undefined,
});

// Puis assignez un rôle à l’utilisateur
await permit.api.assignRole({
user: userId,
role: role,
tenant: 'default',
});

return true;
};

Créer un webhook Logto pour l’enregistrement des utilisateurs

Logto fournit des webhooks qui peuvent notifier votre application lorsqu’un événement se produit. Nous utiliserons le webhook PostRegister pour synchroniser les utilisateurs avec Permit.io lors de leur inscription.

Créez un endpoint webhook dans votre application :

// pages/api/webhooks/logto.js
import { syncUserToPermit } from '../../../libraries/permit';

export default async function handler(req, res) {
// Affichez la charge utile du webhook pour le débogage
console.log('Webhook payload:', req.body);

const { event, user } = req.body;

// Traitez les événements d’enregistrement utilisateur
if (event === 'PostRegister') {
try {
// Déterminez le rôle de l’utilisateur (vous pouvez implémenter votre propre logique ici)
let role = 'viewer'; // Rôle par défaut

// Synchronisez l’utilisateur avec Permit.io
await syncUserToPermit(user.id, user.primaryEmail, user.name, undefined, role);

return res.status(200).json({ success: true });
} catch (error) {
console.error('Erreur lors de la synchronisation de l’utilisateur :', error);
return res.status(500).json({ error: 'Échec de la synchronisation de l’utilisateur' });
}
}

return res.status(200).json({ message: 'Événement ignoré' });
}

Configurer le webhook dans la Console Logto

  1. Accédez à la section Webhooks dans votre Console Logto
  2. Cliquez sur "Créer un webhook"
  3. Donnez un nom à votre webhook
  4. Saisissez l’URL de votre endpoint (par exemple, https://your-app.com/api/webhooks/logto)
  5. Sélectionnez l’événement PostRegister
  6. Enregistrez le webhook
remarque:

Pour le développement local, vous pouvez utiliser des outils comme ngrok pour exposer votre serveur local à Internet.

Tester la synchronisation des utilisateurs

Pour tester que les utilisateurs sont correctement synchronisés :

  1. Créez un nouveau compte utilisateur dans votre application
  2. Vérifiez dans le tableau de bord Permit.io sous "Directory" → "Users" que l’utilisateur a bien été synchronisé
  3. Vérifiez que le bon rôle a été attribué à l’utilisateur lors de l’inscription
Utilisateurs Logto synchronisés avec Permit.io avec attribution de rôles

Utiliser Permit.io pour l’autorisation

Une fois les utilisateurs synchronisés, vous pouvez utiliser Permit.io pour vérifier les permissions :

// Exemple de vérification d’une permission
const isPermitted = await permit.check(userId, 'view', 'reports');

if (isPermitted) {
// L’utilisateur est autorisé à voir les ressources
// Affichez l’interface des ressources
} else {
// L’utilisateur n’est pas autorisé à voir les ressources
// Affichez un message d’accès refusé
}

Conclusion

Vous avez connecté Logto avec Permit.io pour synchroniser automatiquement les utilisateurs et mettre en place l’autorisation dans votre application. Avec cette intégration :

  1. Les utilisateurs s’authentifient via Logto
  2. Les nouveaux utilisateurs sont automatiquement synchronisés avec Permit.io via les webhooks
  3. Vous pouvez utiliser Permit.io pour vérifier les permissions et mettre en œuvre le contrôle d’accès

Cette configuration offre une base solide pour la mise en place de modèles d’autorisation plus avancés à mesure que votre application évolue.

Pour des cas d’usage d’autorisation plus avancés, explorez la documentation de Permit.io sur la création de politiques, l’application des permissions et la mise en œuvre du contrôle d’accès basé sur les rôles.