> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-feat-init-gt-translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Auth0 Configuration pour le scénario d’architecture serveur + API

# Auth0 Configuration (Applications serveur + API)

Dans cette section, nous examinerons les configurations d’ExampleCo dans l’[Auth0 Dashboard](https://manage.auth0.com/#).

<div id="configure-the-api">
  ## Configurer l’API
</div>

Pour protéger une API, vous devez l’enregistrer dans le <Tooltip tip="Auth0 Dashboard : le produit principal d’Auth0 pour configurer vos services." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>. Suivez les instructions dans [Enregistrer des API](/docs/fr-ca/get-started/auth0-overview/set-up-apis) pour configurer l’API Timesheets.

<div id="json-web-token-profile">
  ### Profil de JSON Web Token
</div>

<Tooltip tip="Jeton d’accès : justificatif d’autorisation, sous la forme d’une chaîne opaque ou d’un JWT, utilisé pour accéder à une API." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> définit les types de profils, ou dialectes, d’un <Tooltip tip="OAuth 2.0 : framework d’autorisation qui définit les protocoles et les workflows d’autorisation." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=access+token">access token</Tooltip>. Auth0 prend en charge deux profils différents :

* Auth0 token profile
* RFC 9068 profile

Par défaut, c’est le profil Auth0 qui est utilisé. La principale différence entre ces deux profils réside dans les noms des claims. Le profil Auth0 utilise `azp` plutôt que `client_id`. Pour en savoir plus sur ces différences, consultez [Access Token Profiles](/docs/fr-ca/secure/tokens/access-tokens/access-token-profiles).

<div id="signing-algorithms">
  ### Algorithmes de signature
</div>

Lorsque vous créez une API, vous devez sélectionner l’algorithme avec lequel vos jetons seront signés. La signature sert à vérifier que l’émetteur du <Tooltip tip="JSON Web Token (JWT) : format standard de jeton d’identification (et souvent de jeton d’accès) utilisé pour représenter des claims de façon sécurisée entre deux parties." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=JWT">JWT</Tooltip> est bien celui qu’il prétend être et à s’assurer que le message n’a pas été modifié en cours de route.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  La signature fait partie d’un JWT. Si la structure d’un JWT ne vous est pas familière, veuillez consulter [Structure d’un JSON Web Token](/docs/fr-ca/secure/tokens/json-web-tokens/json-web-token-structure).
</Callout>

Pour créer la signature, vous devez prendre l’en-tête encodé, le payload encodé, un secret, l’algorithme indiqué dans l’en-tête, puis signer le tout. Cet algorithme, qui fait partie de l’en-tête du JWT, est celui que vous sélectionnez pour votre API : `HS256,` `RS256,` ou `PS256`.

La pratique la plus sécuritaire, et celle que nous recommandons, est d’utiliser **RS256**. En voici quelques raisons :

* Avec RS256, vous avez l’assurance que seul le détenteur de la clé privée (Auth0) peut signer des jetons, tandis que n’importe qui peut vérifier la validité du jeton à l’aide de la clé publique.
* Avec HS256, si le secret est compromis, vous devrez redéployer l’API avec le nouveau secret. Avec RS256, vous pouvez demander un jeton valide pour plusieurs audiences.
* Avec RS256, vous pouvez effectuer une rotation de clé sans avoir à redéployer l’API avec le nouveau secret.

<div id="configure-the-scopes">
  ## Configurer les scopes
</div>

Dans les paramètres de votre API, vous devrez configurer les scopes que les applications peuvent demander lors de l’autorisation. Accédez à l’onglet Permissions.

Dans cette section, vous pouvez ajouter les quatre scopes mentionnés précédemment : `batch:upload`, `read:timesheets`, `create:timesheets`, `delete:timesheets` et `approve:timesheets`. Ajoutez également un scope supplémentaire : `batch:upload`.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Dans le cadre de ce document, nous nous intéresserons uniquement au scope `batch:upload`, car c’est le seul requis par la tâche cron. Toutefois, par souci d’exhaustivité, nous ajoutons les scopes nécessaires qui seront requis par de futures applications.
</Callout>

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=8dff080382138313d14af29370ddd360" alt="Dashboard > APIs > Permissions" data-og-width="1052" width="1052" data-og-height="916" height="916" data-path="docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=280&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=1264ccc3bef46dba9519031408354c70 280w, https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=560&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=a6a2664b492d5fa1d914c47252144d22 560w, https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=840&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=83e2c85da9775e1637b664c7f490c4a6 840w, https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=1100&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=85809f3b6adc8f68f350553c729c08aa 1100w, https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=1650&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=b09a8bce44941e04abb6f981e08172d3 1650w, https://mintcdn.com/docs-dev-feat-init-gt-translations/ga3rC1_4s-OF6Vr-/docs/images/cdy7uua7fh8z/73FeuGyODcu3q7PKjLaQOO/63d8d20e9249e751152b4530005f4c71/Timesheets_API_-_Permissions_-_English.png?w=2500&fit=max&auto=format&n=ga3rC1_4s-OF6Vr-&q=85&s=381dcb2d072df9cf946dd55001f9c8eb 2500w" />
</Frame>

<div id="create-the-application">
  ## Créer l’application
</div>

Lors de la création d’une API dans l’Auth0 Dashboard, une application de test pour l’API est automatiquement générée. Dans l’Auth0 Dashboard, accédez à la [section Applications](https://manage.auth0.com/#/applications), et vous verrez l’application de test pour l’API Timesheets.

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/ZmqODkbyV9Q5Sot2/docs/images/cdy7uua7fh8z/7lnuzFgs3IuWyL4bK5aVZV/05abca8035c011bf018b27e31f77a055/2024-06-28_17-13-34.png?fit=max&auto=format&n=ZmqODkbyV9Q5Sot2&q=85&s=38dac820ddbffc9cafcc4347e5816199" alt="undefined" width="1552" height="760" data-path="docs/images/cdy7uua7fh8z/7lnuzFgs3IuWyL4bK5aVZV/05abca8035c011bf018b27e31f77a055/2024-06-28_17-13-34.png" />
</Frame>

Accédez aux paramètres de l’application en sélectionnant l’option de menu tout au bout. Renommez l’application `Timesheets Import Job`.

Pour le cron job, vous aurez besoin d’une Machine-to-Machine Application. L’application de test générée lors de la création de l’API a été automatiquement configurée comme une Machine-to-Machine Application.

<div id="configure-applications-access-to-the-api">
  ## Configurer l’accès de l’application à l’API
</div>

Enfin, vous devez autoriser l’application à accéder à l’API Timesheets. Retournez à la configuration de l’API, puis sélectionnez l’onglet Machine to Machine Application.

Vous verrez l’application **Timesheets Import Job** dans la liste, et elle devrait avoir accès à l’API, comme l’indique le commutateur à droite du nom de l’application, qui affiche la valeur `Authorized`. Si ce n’est pas le cas, il suffit de faire passer la valeur du commutateur de `Unauthorized` à `Authorized`.

Vous devrez également préciser quels scopes seront inclus dans les jetons d’accès émis pour l’application lorsque celle-ci s’autorise auprès d’Auth0.

Développez les paramètres de l’application en cliquant sur la flèche vers le bas tout à fait à droite, et vous verrez la liste des scopes disponibles. La tâche cron n’aura besoin que du scope `batch:upload`, puisqu’elle créera simplement de nouvelles feuilles de temps à partir des entrées de feuille de temps du système externe.

Une fois le scope `batch:upload` sélectionné, enregistrez les paramètres en cliquant sur le bouton **Update**.

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/AcBWN86l7cA24wcQ/docs/images/cdy7uua7fh8z/3PjvkTaoOZKWCMJol4ajCu/b5df50d1b78f95f5a2a8f82e6bb39e42/2025-02-26_18-58-47.png?fit=max&auto=format&n=AcBWN86l7cA24wcQ&q=85&s=6ddd6ea90e6e0e44e1f4af39ac613cee" alt="Dashboard - Applications - APIs - Machine to Machine Applications - Authorize" width="898" height="1274" data-path="docs/images/cdy7uua7fh8z/3PjvkTaoOZKWCMJol4ajCu/b5df50d1b78f95f5a2a8f82e6bb39e42/2025-02-26_18-58-47.png" />
</Frame>

Maintenant que nous avons conçu notre solution et examiné les configurations nécessaires du côté d’Auth0, nous pouvons passer à la mise en œuvre.
