Skip to content

Auth0 client credentials grant

Protéger les API à l’aide des informations d’identification du client OAuth 2 accorder

tjhoo1

Bonjour

,

je suis nouveau sur Auth0.

J’implémente des API dans Next.js 14 pour être appelées par plusieurs systèmes externes.

Comment puis-je protéger les API à l’aide de l’octroi d’informations d’identification client OAuth 2.0 ? Par exemple, le système externe obtient le jeton d’accès à l’aide de l’ID client et de la clé secrète client, puis appelle l’API à l’aide du jeton d’accès.

Auth0 peut-il prendre en charge ce cas d’utilisation ?

J’apprécie si vous pouvez m’indiquer les exemples, les documents et les discussions.

Merci!

peter.fernandez2

@tjhoo

Après avoir répondu à votre autre message récent ici, j’ai pensé que je ferais un suivi sur celui-ci aussi

: j’implémente des API dans Next.js 14 pour être appelées par plusieurs systèmes externes.

Cool, je vous recommande de jeter un coup d’œil à notre article de blog Comment s’authentifier avec Next.js et Auth0 : un guide pour chaque modèle de déploiement si vous ne l’avez pas déjà fait ; Je ne suis pas un expert en Next.js, mais vous ne devriez pas avoir besoin d’informations de sécurité sensibles stockées dans l’API pour valider un jeton d’accès Auth0.

Comment puis-je protéger les API à l’aide de l’octroi d’informations d’identification client OAuth 2.0 ? Par exemple, le système externe obtient le jeton d’accès à l’aide de l’ID client et de la clé secrète client, puis appelle l’API à l’aide du jeton d’accès.

Comme illustré dans l’article de blog susmentionné, les informations d’identification du client ne sont généralement pas utilisées pour obtenir un jeton d’accès pour appeler une API. Dans un contexte Next.js, où l’application est généralement un SPA, c’est-à-dire une page unique non confidentielle Client d’application : l’octroi de code d’autorisation avec PKCE est utilisé à la place. Et cela ne nécessite pas que vous stockiez un secret client pour l’utilisation de l’application J’espère

que cela aide

peter.fernandez3

Bienvenue dans la communauté Auth0, au fait

1 J’aime

tjhoo4

Merci pour vos conseils, mais mon application Next.js ne sert aucune page mais uniquement les points de terminaison de l’API (nous pouvons la considérer comme une Express.js desservant les points de terminaison de l’API).

J’ai créé un dépôt GitHub sur GitHub - tjhoo/kinde-client-credentials pour le support de Kinde. J’espère que le README.md décrit correctement mon cas d’utilisation ...

peter.fernandez5

D’après votre dépôt, les bibliothèques que vous utilisez tentent d’établir un contexte authentifié par l’utilisateur. Pour une API sans état, un contexte utilisateur authentifié (en fait, tout contexte authentifié) ne devrait pas être nécessaire. Votre API doit simplement valider le jeton d’accès qui lui est envoyé pour déterminer si l’appel est autorisé.

Merci pour vos conseils, mais mon application Next.js ne sert aucune page mais uniquement les points de terminaison de l’API (nous pouvons la considérer comme un Express.js desservant les points de terminaison de l’API).

Jetez peut-être un coup d’œil au guide de démarrage rapide du SDK d’API Auth0 Node (Express) : Autorisation qui illustre exactement cela, c’est-à-dire la validation du jeton d’accès transmis à l’API. Ce qui vous intéressera particulièrement, c’est la section ici, je crois que

pour info, Auth0 prend en charge l’utilisation de l’algorithme de cryptage asymétrique RS256 par défaut pour la création/validation de la signature JWT ; Les jetons d’accès générés par Auth0 sont au format JWT. Donc, via l’utilisation de la clé publique-privée cryptographie, il est possible pour l’API de valider un jeton d’accès sans avoir besoin d’informations secrètes détenues (au niveau de l’API).

tjhoo6

Merci, @peter.fernandez

J’ai essayé l’exemple dans Express.js autorisation API et c’est exactement ce que je recherche.

Donc, à partir de là, je devrais ajouter une application de machine à machine pour chacune des applications externes qui veulent appeler mon API ?

peter.fernandez7

J’ai essayé l’exemple dans Express.js autorisation API et c’est exactement ce que je recherche.

Cool, ravi d’apprendre que cela a fonctionné pour vous @tjhoo

Donc, à partir de là, je devrais ajouter une application de machine à machine pour chacune des applications externes qui veulent appeler mon API ?

Je vais commencer en se référant à ma réponse à votre autre post : c’est-à-dire le calcul des tokens M2M et des utilisateurs actifs ? - #2 par Peter.Fernandez. Si vous pouvez nous en dire un peu plus sur les services fournis par votre API, cela peut être utile pour déterminer le flux de travail d’authentification particulier dont vous avez besoin pour obtenir un jeton d’accès.

Si vous recherchez effectivement une authentification au niveau machine-to-machine, alors oui, vous devez créer une application machine-to-machine pour chacune des applications externes dans Auth0, puis elles utiliseront leur ID Client et leur Secret Client respectifs afin d’obtenir un jeton d’accès à utiliser lors de l’appel de votre API.

J’espère que cela vous aidera

tjhoo8

Mes API sont utilisées pour collecter des données d’audit à partir d’un ou plusieurs systèmes comptables (l’application externe). Le système comptable publiera les données d’audit dans mes API.

Lorsque mes points de terminaison d’API ont reçu les données, je dois également déterminer de quel « client » proviennent les données (comment ?).

tjhoo9

Il semble que nous puissions obtenir l’identifiant du client à partir de l’objet comme ceci,