Saltar al contenido principal
Las Actions de Auth0 le permiten modificar o complementar el resultado de la decisión tomada por una política de autorización preconfigurada, para que pueda manejar casos más complejos de los que se pueden resolver solo con control de acceso basado en roles (RBAC). Según el orden en que se ejecuten, las Actions pueden cambiar el resultado de una decisión de autorización antes de que los permisos se agreguen al . También le permiten personalizar el contenido de sus tokens.

Permita el acceso solo en días laborables para una aplicación específica

Supongamos que tiene una aplicación y quiere asegurarse de que solo se pueda acceder a ella en días laborables. Cree una nueva Action y seleccione el desencadenador Login / Post Login, ya que añadirá la Action al flujo de inicio de sesión. Copie el siguiente código en el editor de código de 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.");
    }
  }
}
Por último, agrega la Action que creaste al Login Flow. Para obtener más información sobre cómo adjuntar Actions a los flujos, consulta la sección “Adjuntar la Action a un flujo” en Write Your First Action. Si un usuario intenta acceder a la aplicación durante el fin de semana, se le denegará el acceso, aunque se autentique y tenga los privilegios adecuados.

Permita el acceso solo a los usuarios que estén dentro de la red corporativa

Supongamos que quiere permitir el acceso a una aplicación, pero solo a los usuarios que acceden a ella desde dentro de su red corporativa. Cree una nueva Action y seleccione el desencadenador Login / Post Login, ya que añadirá la Action al flujo de inicio de sesión. Copie el siguiente código en el editor de código de 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.");
  };
};
Por último, agregue la Action que creó al Login Flow. Para obtener más información sobre cómo adjuntar Actions a los flujos, lea la sección “Adjuntar la Action a un flujo” de Write Your First Action. Si el usuario está fuera de la red corporativa, se le denegará el acceso aunque se autentique correctamente y tenga los privilegios adecuados.
Para usar una biblioteca npm como ipaddr.js, debe agregarla como dependencia a la Action. Para obtener más información, lea la sección “Agregar una dependencia” de Write Your First Action.

Deniega el acceso a cualquier usuario que llame a una API

Supongamos que quieres denegar el acceso a todos los usuarios que llaman a una API. Esto significa que debes denegar el acceso en función del valor de identifier de tu API, que puedes encontrar en el campo API de tu API en Auth0 Dashboard > Applications > APIs. Crea una nueva Action y selecciona el desencadenador Login / Post Login, ya que vas a añadir la Action al Login Flow. Copia el siguiente código en el editor de código de Actions:
exports.onExecutePostLogin = async (event, api) => {
  // En Actions, una API se denomina Resource Server.
  const { identifier } = event.resource_server || {};
  if (identifier === "https://api.example.com") {
    api.access.deny("end_users_not_allowed");
  }
}
Por último, agrega la Action que creaste al Login Flow. Para obtener información sobre cómo adjuntar Actions a los flujos, lee la sección “Adjuntar la Action a un flujo” de Write Your First Action. En este caso, el valor de identifier de la API es https://api.example.com, por lo que esta es la audiencia que vamos a rechazar.

Agrega roles de usuario a los tokens

Para agregar roles de usuario a los tokens emitidos por Auth0, usa el objeto event.authorization junto con los métodos api.idToken.setCustomClaim y api.accessToken.setCustomClaim. Crea una nueva Action y selecciona el desencadenador Login / Post Login, ya que añadirás la Action al Login Flow. Copia el siguiente código en el editor de código de 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);
  }
}
Por último, añade la Action que creaste al Login Flow. Para obtener información sobre cómo adjuntar Actions a los flujos, consulta la sección “Adjuntar la Action a un flujo” en Write Your First Action. Recuerda:
  • El que se devuelve a la aplicación solicitante se crea y se firma al final del procesamiento del trigger. No se puede acceder al JWT final firmado desde una Action.

Deniega el acceso a huellas digitales JA3/JA4 específicas

El objeto event.security_context contiene los valores de huella digital JA3/JA4 de la transacción actual. Crea una nueva Action y selecciona el desencadenador Login / Post Login, ya que vas a añadir la Action al Login Flow. Copia el siguiente código en el editor de código de 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');
  }
};
Por último, añade la Action que creaste al Login Flow. Para saber cómo adjuntar Actions a los flujos, consulta la sección “Adjunta la Action a un flujo” de Write Your First Action.