Aller au contenu principal

Machine-to-machine : Auth avec Logto

remarque

Ce guide suppose que vous avez créé une Application de type "Machine-to-machine" dans la Console d'administration.

Introduction

Machine-to-machine (M2M) est une pratique courante pour s'authentifier si vous avez une application (pas un utilisateur) qui doit communiquer directement avec des ressources (généralement, l'utilisation d'une application M2M ne nécessite pas d'interactions utilisateur, donc elle n'a pas d'interface utilisateur). Par exemple, un service API qui met à jour les données personnalisées des utilisateurs dans Logto, un service statistique qui récupère les commandes quotidiennes, etc.

Étant donné que Logto utilise le contrôle d’accès basé sur les rôles (RBAC) comme sa politique de contrôle d'accès, l'attribution de rôles M2M aux applications M2M est nécessaire pour protéger votre API qui nécessite une communication directe avec le service.

info

Pour en savoir plus sur notre RBAC actuel et la différence entre le rôle utilisateur et le rôle M2M, consultez Configurer les rôles pour en savoir plus.

Il existe deux cas d'utilisation courants des applications machine-to-machine dans Logto :

  1. Accéder à Logto Management API : Dans ce cas, vous devez attribuer un rôle M2M qui inclut la permission all de la Logto Management API intégrée à votre application M2M.
  2. Accéder à votre ressource API : Dans ce cas, vous devez attribuer des rôles M2M qui incluent des permissions de vos ressources API à votre application M2M.

Pendant le processus de création de l'application M2M, vous serez dirigé vers une page où vous pouvez attribuer des Rôles M2M à vos applications :

Assign M2M roles modal

Ou vous pouvez également attribuer ces rôles sur la page de détails de l'application M2M lorsque vous avez déjà créé une application M2M :

Assign M2M roles page

Maintenant, parcourons le processus de bout en bout. Pour plus de clarté, nous séparerons les étapes pour accéder à Logto Management API et à d'autres ressources API. Et nous supposons que vous avez déjà créé une application M2M dans Logto.

Récupérer un jeton d’accès

Notions de base sur la requête de jeton d’accès

L'application M2M effectue une requête POST vers le point de terminaison de jeton pour récupérer un jeton d’accès (Access token) en ajoutant les paramètres suivants en utilisant le format application/x-www-form-urlencoded dans le corps de l'entité de la requête HTTP :

  • grant_type : Doit être défini sur client_credentials
  • resource : La ressource à laquelle vous souhaitez accéder
  • scope : La portée de la requête d’accès

Vous devez également inclure les informations d'identification de votre application M2M dans l'en-tête de la requête pour que le point de terminaison de jeton puisse authentifier votre application M2M.

Cela est réalisé en incluant les informations d'identification de l'application dans le formulaire d' Authentification (Basic authentication) dans l'en-tête de la requête Authorization, où le nom d'utilisateur est l'ID de l'application et le mot de passe est le secret de l'application.

Vous pouvez trouver l'ID de l'application et le secret de l'application sur la page des détails de votre application M2M :

ID de l'application et secret de l'application

Un exemple de requête de jeton d’accès est :

POST /oidc/token HTTP/1.1
Host: your.logto.endpoint
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&resource=https://shopping.api
&scope=read:products write:products

Demander un jeton d’accès

remarque

Dans la démonstration suivante, remplacez https://your.logto.endpoint par le point de terminaison Logto que vous ciblez. Pour Logto Cloud, ce sera https://{your-tenant-id}.logto.app.

Logto fournit une ressource intégrée "Logto Management API", c'est une ressource en lecture seule avec la permission all pour accéder à Logto Management API, vous pouvez la voir dans votre liste de ressources API. L'indicateur de ressource API suit le modèle https://{your-tenant-id}.logto.app/api , et cela sera votre valeur de ressource utilisée dans le corps de la requête de jeton d’accès.

Détails de Logto Management API

Avant d'accéder à Logto Management API, assurez-vous que votre application M2M a été assignée avec des rôles M2M qui incluent la permission all de cette ressource intégrée "Logto Management API".

info

Logto fournit également un rôle M2M préconfiguré "Logto Management API access" pour les nouveaux locataires créés, auquel la permission all de la ressource Logto Management API a déjà été assignée. Vous pouvez l'utiliser directement sans configurer manuellement les permissions. Ce rôle préconfiguré peut également être modifié et supprimé selon les besoins.

Maintenant, composez tout ce que nous avons et envoyez la requête :

const logtoEndpoint = 'https://your.logto.endpoint'; // Remplacez par votre point de terminaison Logto
const tokenEndpoint = `${logtoEndpoint}/oidc/token`;
const applicationId = 'your-application-id';
const applicationSecret = 'your-application-secret';
const tenantId = 'your-tenant-id';

const fetchAccessToken = async () => {
return await fetch(tokenEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
Authorization: `Basic ${Buffer.from(`${applicationId}:${applicationSecret}`).toString(
'base64'
)}`,
},
body: new URLSearchParams({
grant_type: 'client_credentials',
resource: `https://${tenantId}.logto.app/api`,
scope: 'all',
}).toString(),
});
};
attention

Pour les utilisateurs de Logto Cloud : lorsque vous interagissez avec Logto Management API, vous ne pouvez pas utiliser de domaine personnalisé, utilisez le point de terminaison Logto par défaut https://{your_tenant_id}.logto.app/oidc/token pour obtenir des jetons d’accès.

Réponse du jeton d’accès

Un corps de réponse d'accès réussi serait comme :

{
"access_token": "eyJhbG...2g", // Utilisez ce jeton pour accéder à Logto Management API
"expires_in": 3600, // Expiration du jeton en secondes
"token_type": "Bearer", // Type d'authentification pour votre requête lors de l'utilisation du jeton d’accès
"scope": "all" // portée `all` pour Logto Management API
}
remarque

Logto ne prend pas actuellement en charge l'application M2M pour représenter un utilisateur. Le sub dans la charge utile du jeton d’accès sera l'ID de l'application.

Accéder à la ressource en utilisant le jeton d’accès

Vous pouvez remarquer que la réponse du jeton a un champ token_type, qui est fixé à Bearer.

Ainsi, vous devez placer le jeton d’accès dans le champ Authorization des en-têtes HTTP avec le format Bearer (Bearer YOUR_TOKEN) lorsque vous interagissez avec votre serveur de ressource API.

Utilisation du jeton d’accès (Jeton d’accès) demandé avec la ressource API de gestion intégrée de Logto https://[your-tenant-id].logto.app/api pour obtenir toutes les applications dans Logto :

const logtoEndpoint = 'https://your.logto.endpoint'; // Remplacez par votre point de terminaison Logto
const accessToken = 'eyJhb...2g'; // Jeton d’accès

const fetchLogtoApplications = async () => {
return await fetch(`${logtoEndpoint}/api/applications`, {
method: 'GET',
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
};

Authentification

Si vous protégez vos propres ressources API autres que Logto Management API, n'oubliez pas de mettre en œuvre l'authentification pour votre ressource. Consultez Protéger votre API pour plus de détails.