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

> Aprende a usar Actions con control de acceso basado en roles (RBAC).

# Casos prácticos: Actions con autorización

Las [Actions](/es/docs/customize/actions) de Auth0 le permiten modificar o complementar el resultado de la decisión tomada por una [política de autorización](/es/docs/manage-users/access-control/authorization-policies) preconfigurada, para que pueda manejar casos más complejos de los que se pueden resolver solo con [control de acceso basado en roles (RBAC)](/es/docs/manage-users/access-control/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 <Tooltip tip="Token de acceso: credencial de autorización, en forma de una cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=Access+Token">Token de acceso</Tooltip>. También le permiten personalizar el contenido de sus tokens.

<div id="allow-access-only-on-weekdays-for-a-specific-application">
  ## Permita el acceso solo en días laborables para una aplicación específica
</div>

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](/es/docs/customize/actions/write-your-first-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:

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/). 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](/es/docs/customize/actions/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.

<div id="allow-access-only-to-users-who-are-inside-the-corporate-network">
  ## Permita el acceso solo a los usuarios que estén dentro de la red corporativa
</div>

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](/es/docs/customize/actions/write-your-first-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:

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/). 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](/es/docs/customize/actions/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.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  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](/es/docs/customize/actions/write-your-first-action).
</Callout>

<div id="deny-access-to-anyone-calling-an-api">
  ## Deniega el acceso a cualquier usuario que llame a una API
</div>

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 <Tooltip tip="Audiencia: identificador único de la audiencia de un token emitido. Se denomina aud en un token; su valor contiene el ID de una aplicación (ID de cliente) para un ID Token o de una API (Identificador de API) para un Token de acceso." cta="Ver glosario" href="/es/docs/glossary?term=Audience">Audiencia</Tooltip>** de tu API en [Auth0 Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). [Crea una nueva Action](/es/docs/customize/actions/write-your-first-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:

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/). 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](/es/docs/customize/actions/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.

<div id="add-user-roles-to-tokens">
  ## Agrega roles de usuario a los tokens
</div>

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](/es/docs/customize/actions/write-your-first-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:

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/). 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](/es/docs/customize/actions/write-your-first-action).

Recuerda:

* El <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, de Token de acceso) que se utiliza para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> 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.

<div id="deny-access-to-specific-ja3ja4-fingerprints">
  ## Deniega el acceso a huellas digitales JA3/JA4 específicas
</div>

El objeto `event.security_context` contiene los valores de huella digital JA3/JA4 de la transacción actual.

[Crea una nueva Action](/es/docs/customize/actions/write-your-first-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:

```js lines theme={null}
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](https://manage.auth0.com/#/actions/flows/login/). Para saber cómo adjuntar Actions a los flujos, consulta la sección "Adjunta la Action a un flujo" de [Write Your First Action](/es/docs/customize/actions/write-your-first-action).
