Passer au contenu principal
Auth0 Actions vous permettent de modifier ou de compléter le résultat de la décision prise par une stratégie d’autorisation préconfigurée, afin de gérer des cas plus complexes que ceux que permet à lui seul le contrôle d’accès basé sur les rôles (RBAC). Selon l’ordre dans lequel elles s’exécutent, les Actions peuvent modifier le résultat d’une décision d’autorisation avant que des permissions soient ajoutées au . Elles vous permettent aussi de personnaliser le contenu de vos jetons.

Autoriser l’accès à une application donnée uniquement les jours de semaine

Supposons que vous ayez une application que vous voulez rendre accessible uniquement les jours de semaine. Créez une nouvelle Action, puis sélectionnez le déclencheur Login / Post Login, car vous allez ajouter l’Action au flux de connexion. Copiez le code suivant dans l’éditeur de code des Actions :
exports.onExecutePostLogin = async (event, api) => {
  if (event.client.name === "APP_NAME") {
    const d = new Date().getDay();

    if (d === 0 || d === 6) {
      api.access.deny("This app is only available during the week.");
    }
  }
}
Enfin, ajoutez l’Action que vous avez créée au flux de connexion. Pour savoir comment associer des Actions à des flux, consultez la section “Attacher l’Action à un flux” dans Créer votre première Action. Si un utilisateur tente d’accéder à l’application durant la fin de semaine, l’accès sera refusé, même s’il s’authentifie et qu’il possède les privilèges appropriés.

Autoriser l’accès uniquement aux utilisateurs qui se trouvent sur le réseau de l’entreprise

Supposons que vous souhaitiez autoriser l’accès à une application, mais uniquement pour les utilisateurs qui y accèdent à partir du réseau de votre entreprise. Créez une nouvelle Action, puis sélectionnez le déclencheur Login / Post Login, puisque vous ajouterez l’Action au flux de connexion. Copiez le code suivant dans l’éditeur de code des Actions :
const ipaddr = require("ipaddr.js");

exports.onExecutePostLogin = async (event, api) => {
  const corpNetwork = "192.168.1.134/26";
  const currentIp = ipaddr.parse(event.request.ip);

  if (!currentIp.match(ipaddr.parseCIDR(corpNetwork))) {
    api.access.deny("This app is only available from inside the corporate network.");
  };
};
Enfin, ajoutez l’Action que vous avez créée au flux de connexion. Pour savoir comment associer des Actions à des flux, consultez la section “Associer l’Action à un flux” dans Créer votre première Action. Si l’utilisateur se trouve à l’extérieur du réseau d’entreprise, l’accès lui sera refusé même s’il s’authentifie avec succès et dispose des privilèges appropriés.
Pour utiliser une bibliothèque npm comme ipaddr.js, vous devez l’ajouter comme dépendance à l’Action. Pour en savoir plus, consultez la section “Ajouter une dépendance” dans Créer votre première Action.

Refuser l’accès à quiconque appelle une API

Supposons que vous souhaitiez refuser l’accès à tous les utilisateurs qui appellent une API. Cela signifie que vous devez refuser l’accès en fonction de la valeur identifier de votre API, que vous trouverez dans le champ API de votre API dans Auth0 Dashboard > Applications > APIs. Créez une nouvelle Action, puis sélectionnez le déclencheur Login / Post Login, puisque vous ajouterez l’Action au flux de connexion. Copiez le code suivant dans l’éditeur de code des Actions :
exports.onExecutePostLogin = async (event, api) => {
  // Dans Actions, une API est désignée sous le nom de serveur de ressources.
  const { identifier } = event.resource_server || {};
  if (identifier === "https://api.example.com") {
    api.access.deny("end_users_not_allowed");
  }
}
Enfin, ajoutez l’Action que vous avez créée au flux de connexion. Pour savoir comment associer des Actions à des flux, consultez la section “Associer l’Action à un flux” dans Créer votre première Action. Dans ce cas, la valeur identifier de l’API est https://api.example.com ; c’est donc cette audience que nous refuserons.

Ajouter les rôles de l’utilisateur aux jetons

Pour ajouter les rôles de l’utilisateur aux jetons émis par Auth0, utilisez l’objet event.authorization ainsi que les méthodes api.idToken.setCustomClaim et api.accessToken.setCustomClaim. Créez une nouvelle Action, puis sélectionnez le déclencheur Login / Post Login, puisque vous ajouterez l’Action au flux de connexion. Copiez le code suivant dans l’éditeur de code des Actions :
exports.onExecutePostLogin = async (event, api) => {
  const namespace = 'https://my-app.example.com';
  if (event.authorization) {
    api.idToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
    api.accessToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
  }
}
Enfin, ajoutez l’Action que vous avez créée au flux de connexion. Pour savoir comment associer des Actions à des flux, consultez la section “Associer l’Action à un flux” dans Créer votre première Action. N’oubliez pas :
  • Le renvoyé à l’application qui en fait la demande est généré et signé à la fin du traitement du déclencheur. Le JWT final signé n’est pas accessible dans une Action.

Refuser l’accès à des empreintes JA3/JA4 spécifiques

L’objet event.security_context contient les valeurs d’empreinte JA3/JA4 associées à la transaction en cours. Créez une nouvelle Action, puis sélectionnez le déclencheur Login / Post Login, puisque vous ajouterez l’Action au flux de connexion. Copiez le code suivant dans l’éditeur de code des Actions :
exports.onExecutePreUserRegistration = async (event, api) => {
  const clientJa4 = event?.security_context?.ja4;
  console.log('[ACTION]', {clientJa4});
  const badFingerprints = ['t13d1517h2_8daaf6152771_b6f405a00624','t13d1516h2_8daaf6152771_d8a2da3f94cd'];
  if (clientJa4 && badFingerprints.includes(clientJa4)){
    api.access.deny('suspicious_tls_fingerprint', 'Your TLS fingerprint has been flagged as suspicious');
  }
};
Enfin, ajoutez l’Action que vous avez créée au flux de connexion. Pour savoir comment associer des Actions à des flux, consultez la section “Associer l’Action à un flux” dans Créer votre première Action.