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

# Acceso de las aplicaciones a las API: Client Grants

> Obtén información sobre Client Grants

En Auth0, puedes controlar cómo las aplicaciones acceden a tus API mediante [políticas de acceso de aplicaciones a las API](/es/docs/get-started/apis/api-access-policies-for-applications) y client grants.

Un client grant proporciona acceso granular de una aplicación a una API. Asocia:

* Una API identificada por su `audience` o identificador único.
* Una aplicación identificada por su `client_id`.
* Una lista de permisos, como alcances y/o `authorization_details_types`, que la aplicación puede solicitar para la audiencia especificada.

Para obtener más información sobre la lista de atributos que puedes definir en un client grant, consulta [Atributos de client grant](#client-grant-attributes). Para obtener información sobre cómo definir y administrar client grants, consulta [Crear client grant](#create-client-grant).

<div id="application-api-access-policies-and-client-grants">
  ## Políticas de acceso de aplicaciones a la API y client grants
</div>

Cuando configuras la [política de acceso de aplicaciones](/es/docs/get-started/apis/api-access-policies-for-applications) de una API como `require_client_grant`, solo las aplicaciones que tengan definido un client grant pueden obtener un token de acceso para la API. El client grant establece los permisos máximos que una aplicación puede solicitar a la API, conforme al principio de mínimo privilegio. Por ello, Auth0 recomienda usar `require_client_grant` al configurar la política de acceso de aplicaciones de una API.

<div id="example-social-media-api">
  ### Ejemplo: API de redes sociales
</div>

Para ilustrar cómo los client grants aplican el principio de privilegio mínimo, supongamos que tiene una API de redes sociales con los permisos `read:posts`, `write:posts`, `read:friends` y `delete:posts`. Crea una aplicación y define un client grant con los permisos `read:posts` y `write:posts`.

Este client grant ahora actúa como un límite estricto. Aunque la API de redes sociales tenga otros permisos, su aplicación nunca podrá solicitar ni obtener `read:friends` o `delete:posts`.

<div id="user-delegated-access-vs-client-access">
  ## Acceso delegado por el usuario vs. acceso del cliente
</div>

Tanto en el acceso de usuario como en el acceso de cliente, los client grants definen el conjunto final de permisos que controlan el acceso de una aplicación a una API. El atributo `subject_type` del client grant determina el tipo de acceso de la aplicación que se permite para una API.

Una aplicación puede tener hasta dos client grants para una sola API:

* Cuando establece `subject_type` en `client`, define sus permisos de máquina a máquina.
* Cuando establece `subject_type` en `user`, define sus permisos para actuar en nombre del usuario.

La siguiente tabla explica cómo los client grants controlan el acceso de las aplicaciones a las API según el flujo del tipo de acceso:

| Tipo de acceso                                                   | Atributo `subject_type`                | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Acceso con credenciales de cliente (acceso de máquina a máquina) | Establezca `subject_type` en `client`. | El client grant autoriza directamente a la aplicación a acceder a la API en su propio nombre, en lugar de hacerlo en nombre del usuario final. Los permisos que define en el client grant son los que la aplicación está autorizada a recibir en el token de acceso.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Acceso delegado por el usuario                                   | Establezca `subject_type` en `user`.   | El client grant define los permisos máximos que la aplicación puede solicitar a la API. Los permisos finales del token de acceso emitido a la aplicación en nombre del usuario son la intersección de los permisos:<br /><ul><li>Solicitados por la aplicación</li><li>Permitidos por el client grant</li><li>Permitidos por las [políticas de control de acceso basado en roles](/es/docs/manage-users/access-control/rbac) para el usuario</li><li>[Autorizados por el usuario final](/es/docs/get-started/applications/third-party-applications/user-consent-and-third-party-applications), si corresponde.</li></ul><br />Para obtener más información sobre los flujos de acceso delegado por el usuario, consulte [Flujos de autenticación y autorización](/es/docs/get-started/authentication-and-authorization-flow). Los flujos de acceso delegado por el usuario no incluyen el flujo de credenciales del cliente. |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Puede modificar los alcances finales otorgados por el Servidor de autorización a la aplicación o al usuario mediante [Actions](/es/docs/customize/actions).
</Callout>

<div id="client-grant-attributes">
  ## Atributos del client grant
</div>

Un client grant tiene varios atributos que puede definir para configurar el acceso de la aplicación a las API mediante la Auth0 Management API:

| Atributo                      | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                          | Identificador único del client grant.                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `audience`                    | Identificador único de la API a la que corresponde el client grant.                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `client_id`                   | El id único de la aplicación a la que se le concede acceso.                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `scopes`                      | Una matriz de cadenas que representa los permisos que la aplicación puede solicitar.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `authorization_details_types` | Una matriz de cadenas que representa tipos de datos de autorización enriquecidos que la aplicación puede solicitar. Este atributo solo se puede especificar para flujos de acceso delegados por el usuario.                                                                                                                                                                                                                                                                                                     |
| `subject_type`                | El tipo de acceso de aplicación que permite el client grant:<br /><ul><li>`user`: se usa para acceso delegado por el usuario, que corresponde a todos los flujos que generan un token asociado a un usuario final.</li><li>`client`: se usa para acceso de máquina, que corresponde al flujo de credenciales del cliente.</li></ul>                                                                                                                                                                             |
| `allow_all_scopes`            | Booleano. Indica si se permiten para la aplicación todos los alcances definidos en la API. En el caso de la API, los alcances que se definan en el futuro se permitirán automáticamente.                                                                                                                                                                                                                                                                                                                        |
| `organization_usage`          | Determina cómo puede usar la aplicación las organizaciones al acceder a la API mediante el flujo de credenciales del cliente. Los valores posibles son `deny`, `allow` o `require`.<br /><br />Para obtener más información sobre la configuración de la organización, lea [Organizaciones para aplicaciones M2M: definir el comportamiento de la organización](/es/docs/manage-users/organizations/organizations-for-m2m-applications/configure-your-application-for-m2m-access#define-organization-behavior). |
| `allow_any_organization`      | Determina si la aplicación puede acceder a cualquier organización al usar el flujo de credenciales del cliente.<br /><br />Para obtener más información sobre la configuración de la organización, lea [Organizaciones para aplicaciones M2M: definir el comportamiento de la organización](/es/docs/manage-users/organizations/organizations-for-m2m-applications/configure-your-application-for-m2m-access#define-organization-behavior).                                                                     |

<div id="create-client-grant">
  ## Crear client grant
</div>

Puede crear:

* [Permisos por aplicación](#per-application-permissions): Aplique permisos granulares a cada aplicación de su inquilino.
* [Permisos predeterminados para aplicaciones de terceros](#default-permissions-for-third-party-applications): Aplique permisos predeterminados a todas las aplicaciones de terceros de su inquilino.

Cuando ambos están configurados para la misma API, los permisos por aplicación prevalecen sobre los permisos predeterminados para aplicaciones de terceros.

<div id="per-application-permissions">
  ### Permisos por aplicación
</div>

<Tabs>
  <Tab title="Auth0 Dashboard">
    Para configurar los permisos por aplicación con Auth0 Dashboard:

    1. Vaya a [Dashboard >  Applications > APIs](https://manage.auth0.com/#/apis) y seleccione la API para la que quiere configurar el acceso de la aplicación.
    2. Vaya a la pestaña **Settings** y desplácese hacia abajo hasta **Application Access Policy**.
       * Configure **User-Delegated Access** como **No apps allowed**, **Per-app authorization** o **All apps allowed**.
         * **No apps allowed**: Ninguna aplicación puede obtener un token de acceso para la API.
         * **Per-app authorization**: Solo las aplicaciones con un client grant definido pueden obtener un token de acceso para la API.
         * **All apps allowed**: Cualquier aplicación de su inquilino puede obtener un token de acceso para la API.
       * Configure **Client Access** como **Per-app authorization** o **All apps allowed**.
         * **Per-app authorization**: Solo las aplicaciones con un client grant definido pueden obtener un token de acceso para la API.
         * **All apps allowed**: Cualquier aplicación de su inquilino puede obtener un token de acceso para la API.
    3. Seleccione **Save** para guardar la configuración de **Application Access Policy**.

    <Frame>
      <img src="https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/third-party-applications/application_access_policy.png?fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=99767f91f6ed62363a1a0fde1a8f41b4" alt="Configuración de la API en el Dashboard para Application Access Policy" width="1958" height="600" data-path="docs/images/third-party-applications/application_access_policy.png" />
    </Frame>

    Para los permisos por aplicación, debe autorizar el acceso a la API individualmente para cada aplicación.

    1. Vaya a **Applications > APIs** y seleccione la API.
    2. Vaya a la pestaña **Application Access**.
    3. Desplácese hasta la aplicación, seleccione **Edit** y luego **Grant Access** para **User-Delegated Access** y/o **Client Access**. Después, seleccione los permisos que desee.
    4. Seleccione **Save**.

    <Frame>
      <img src="https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/third-party-applications/grant-api-access.png?fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=57f8a27e6e446ae919139b0ca3caebd9" alt="Configuración de la API en el Dashboard para conceder acceso a la API a una aplicación" width="2002" height="128" data-path="docs/images/third-party-applications/grant-api-access.png" />
    </Frame>
  </Tab>

  <Tab title="Management API">
    Realice una solicitud [`POST`](https://auth0.com/docs/api/management/v2/client-grants/post-client-grants) al endpoint `/client-grants` con el siguiente cuerpo de la solicitud:

    ```bash lines theme={null}
    curl --location 'https://{yourDomain}/api/v2/client-grants' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
    --data '{
        "client_id": "{CLIENT_ID}",
        "audience": "https://api.my-service.com",
        "scope": [
            "read:item"
        ],
        "authorization_details_types":["payment"],
        "subject_type": "user"
    }'
    ```
  </Tab>
</Tabs>

<div id="default-permissions-for-third-party-applications">
  ### Permisos predeterminados para aplicaciones de terceros
</div>

Las [aplicaciones de terceros](/es/docs/get-started/applications/third-party-applications) siempre requieren un client grant explícito para acceder a cualquier API, incluso cuando la [política de acceso](/es/docs/get-started/apis/api-access-policies-for-applications) de la API está configurada en **Allow All**. Para simplificar la administración si tiene muchas aplicaciones de terceros o usa [Dynamic Client Registration](/es/docs/get-started/applications/dynamic-client-registration), configure grants o permisos predeterminados que se apliquen automáticamente a todas las aplicaciones de terceros.

Un client grant predeterminado para terceros usa el atributo `default_for` en lugar de `client_id`. También puede definir permisos por aplicación creando un client grant con un `client_id` específico. Cuando ambos existen para la misma API, los permisos por aplicación tienen prioridad.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Las API del sistema (la Management API, My Account API y otras) no admiten client grants predeterminados para terceros. No es posible conceder a aplicaciones de terceros acceso a las API del sistema.
</Callout>

Los atributos `default_for` y `client_id` son mutuamente excluyentes. Cada client grant debe especificar exactamente uno de ellos.

Para obtener información sobre cómo configurar políticas de acceso a API para aplicaciones de terceros, consulte [Configurar aplicaciones de terceros](/es/docs/get-started/applications/third-party-applications/configure-third-party-applications#configure-api-access-policies).

<Tabs>
  <Tab title="Auth0 Dashboard">
    Para configurar permisos predeterminados para aplicaciones de terceros con Auth0 Dashboard:

    1. Vaya a [Dashboard >  Applications > APIs](https://manage.auth0.com/#/apis) y seleccione la API para la que desea configurar el acceso de las aplicaciones.
    2. Vaya a la pestaña **Settings** y desplácese hacia abajo hasta **Default Permissions for Third-Party Applications**.
       * Configure **User-Delegated Access** y/o **Client Access** como **Unauthorized**, **Authorized** o **All**.
         * **Unauthorized**: No se permite ningún permiso.
         * **Authorized**: Seleccione los permisos que correspondan.
         * **All**: Incluye los permisos actuales y futuros.
    3. Seleccione **Save**.

    <Frame>
      <img src="https://mintcdn.com/translations/S4csL9vq6QUX5-Rr/docs/images/third-party-applications/default-permissions-settings.png?fit=max&auto=format&n=S4csL9vq6QUX5-Rr&q=85&s=b39ad27ef58bf44bde053a01cd514202" alt="Configuración de API en el Dashboard con permisos predeterminados para aplicaciones de terceros" width="1954" height="1022" data-path="docs/images/third-party-applications/default-permissions-settings.png" />
    </Frame>
  </Tab>

  <Tab title="Management API">
    Haga una solicitud `POST` al endpoint `/api/v2/client-grants` con el siguiente cuerpo de solicitud:

    ```bash cURL wrap lines theme={null} theme={null}
    curl --request POST \
        --url 'https://YOUR_DOMAIN/api/v2/client-grants' \
        --header 'Authorization: Bearer YOUR_MANAGEMENT_API_TOKEN' \
        --header 'Content-Type: application/json' \
        --data '{
            "default_for": "third_party_clients",
            "audience": "https://api.example.com",
            "scope": ["read:items", "write:items"],
            "subject_type": "user"
    }'
    ```

    | **Parámetro**  | **Tipo** | **Descripción**                                                                                                                                                                                                                                                                                                                |
    | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `default_for`  | String   | Especifica si este grant se aplica automáticamente a determinados tipos de aplicaciones. Establézcalo en `third_party_clients` para garantizar que todas las aplicaciones de terceros tengan acceso a esta API de forma predeterminada.                                                                                        |
    | `audience`     | String   | El identificador único (URI) de la API para la que se crea el grant.                                                                                                                                                                                                                                                           |
    | `scope`        | Array    | Una lista de permisos (alcances) permitidos como parte de este grant.                                                                                                                                                                                                                                                          |
    | `subject_type` | String   | Define el tipo de acceso de la aplicación permitido para la API:<br /><ul><li>`user`: Se usa para el acceso delegado por el usuario, que corresponde a flows que generan un token asociado a un usuario final.</li><li>`client`: Se usa para acceso de máquina a máquina, como el flujo de credenciales del cliente.</li></ul> |
  </Tab>
</Tabs>

<div id="update-client-grant">
  ## Actualizar el client grant
</div>

Para actualizar un client grant existente, realiza una solicitud [`PATCH`](https://auth0.com/docs/api/management/v2/client-grants/patch-client-grants-by-id) a `/client-grants/{id}`:

```bash lines theme={null}
curl --location --request PATCH 'https://{yourDomain}/api/v2/client-grants/{CLIENT_GRANT_ID}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
--data '{
    "scope": [
        "read:item",
        "update:item"
    ],
    "authorization_details_types":["payment", "credits_transfer"]
}'
```

<div id="delete-client-grant">
  ## Eliminar client grant
</div>

Para eliminar un client grant, realiza una solicitud [`DELETE`](https://auth0.com/docs/api/management/v2/client-grants/delete-client-grants-by-id) a `/client-grants/{id}`:

```bash lines theme={null}
curl --location --request DELETE 'https://{yourDomain}/api/v2/client-grants/{CLIENT_GRANT_ID}' \
--header 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}'
```

<div id="retrieve-client-grants">
  ## Obtener client grants
</div>

También puede consultar y paginar la colección `client-grants` mediante parámetros como `client_id`, `audience` o `subject_type`:

```bash lines theme={null}
curl --request GET \
--url 'https://{yourDomain}/api/v2/client-grants?subject_type=user&audience=https%3A%2F%2Fapi.my-service.com' \
--header 'Authorization: Bearer {YOUR_MANAGEMENT_API_TOKEN}' \
--header 'Accept: application/json'
```

<div id="learn-more">
  ## Más información
</div>

* [Políticas de acceso a la API para aplicaciones](/es/docs/get-started/apis/api-access-policies-for-applications)
* [Tipos de concesión de aplicaciones](/es/docs/get-started/applications/application-grant-types)
* [Aplicaciones de terceros](/es/docs/get-started/applications/third-party-applications)
* [Configurar aplicaciones de terceros](/es/docs/get-started/applications/third-party-applications/configure-third-party-applications)
