> ## 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.

> Obtén información sobre el flujo Machine to Machine de Actions y el disparador de Action credentials-exchange, que se ejecuta como parte del flujo Machine to Machine.

# disparador de Machine to Machine

El disparador de Machine to Machine se ejecuta cuando se emite un <Tooltip tip="Token de acceso: credencial de autorización, en forma de una cadena opaca o un JWT, que se utiliza para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=Access+Token">Token de acceso</Tooltip> mediante el [flujo de credenciales de cliente](/es/docs/get-started/authentication-and-authorization-flow/client-credentials-flow).

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1JPl54LFWCUh5StuglZS2o/41f89372526574c3b8cdac4d5ba38072/Machine_to_Machine_Flow.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=12356c2f5b637c5760d658116c2345bf" alt="Diagrama que muestra el flujo Machine to Machine de Actions y cuándo se ejecutan los disparadores dentro de él." width="851" height="215" data-path="docs/images/cdy7uua7fh8z/1JPl54LFWCUh5StuglZS2o/41f89372526574c3b8cdac4d5ba38072/Machine_to_Machine_Flow.png" />
</Frame>

Las Actions de este flujo son bloqueantes (sincrónicas), lo que significa que se ejecutan como parte del proceso del disparador y evitan que el resto del flujo de Auth0 se ejecute hasta que la Action se complete.

<div id="triggers">
  ## Disparadores
</div>

<div id="m2m-client-credentials">
  ### M2M / Credenciales de cliente
</div>

El disparador `credentials-exchange` es una función que se ejecuta antes de devolver el token de acceso.

<div id="references">
  #### Referencias
</div>

* [Objeto de evento](/es/docs/customize/actions/explore-triggers/machine-to-machine-trigger/credentials-exchange-event-object): Proporciona información contextual sobre la solicitud de intercambio de credenciales de cliente.
* [Objeto de API](/es/docs/customize/actions/explore-triggers/machine-to-machine-trigger/credentials-exchange-api-object): Proporciona métodos para modificar el comportamiento del flujo.

<div id="common-use-cases">
  ## Casos de uso habituales
</div>

<div id="access-control">
  ### Control de acceso
</div>

Se puede usar una Action de intercambio de credenciales para denegar un token de acceso en función de una lógica personalizada.

```javascript lines theme={null}
/**
 * @param {Event} event - Detalles sobre la solicitud de concesión de credenciales de cliente.
 * @param {CredentialsExchangeAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento de la concesión de credenciales de cliente.
 */
exports.onExecuteCredentialsExchange = async (event, api) => {
  if (event.request.geoip.continentCode === "NA") {
    api.access.deny('invalid_request', "Access from North America is not allowed.");
  }
};
```

<div id="add-custom-claims-to-the-access-token">
  ### Añadir claims personalizados al token de acceso
</div>

Se puede usar una Action de intercambio de credenciales para añadir claims personalizados a un token de acceso.

```javascript lines theme={null}
/**
 * @param {Event} event - Detalles sobre la solicitud de concesión de credenciales de cliente.
 * @param {CredentialsExchangeAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento de la concesión de credenciales de cliente.
 */
exports.onExecuteCredentialsExchange = async (event, api) => {
  api.accessToken.setCustomClaim("https://my-api.exampleco.com/request-ip", event.request.ip);  
};
```

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Recomendamos encarecidamente usar un claim personalizado con espacio de nombres con formato de URI. Para obtener más información sobre los claims personalizados con y sin espacio de nombres, consulta [Crear claims personalizados](/es/docs/secure/tokens/json-web-tokens/create-custom-claims).
</Callout>
