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

> Configuración de Auth0 para el escenario de arquitectura de aplicaciones móviles + API

# Configuración de Auth0 (aplicaciones móviles + API)

En esta sección revisaremos toda la configuración que debemos aplicar en el [Auth0 Dashboard](https://manage.auth0.com/#).

<div id="create-the-api">
  ## Crear la API
</div>

Haga clic en la [opción del menú APIs](https://manage.auth0.com/#/apis) de la izquierda y, a continuación, en el botón Create API.

Deberá proporcionar los siguientes datos para su API:

* **Nombre**: un nombre descriptivo para la API. No afecta a ninguna funcionalidad.
* **Identificador**: un identificador único para la API. Recomendamos usar una URL, pero tenga en cuenta que no es necesario que sea una URL de acceso público; Auth0 no llamará a su API en ningún caso. Este valor no se puede modificar posteriormente.
* **<Tooltip tip="Algoritmo de firma: algoritmo usado para firmar digitalmente tokens y garantizar que el token no haya sido manipulado." cta="Ver glosario" href="/es/docs/glossary?term=Signing+Algorithm">Algoritmo de firma</Tooltip>**: el algoritmo que se utilizará para firmar los tokens. Los valores disponibles son `HS256` y `RS256`. Al seleccionar RS256, el token se firmará con la clave privada del inquilino. Para obtener más información sobre los algoritmos de firma, consulte [Signing Algorithms](/es/docs/get-started/applications/signing-algorithms).

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/094cff6e8e1788c39796eb28ab1925ca/2024-06-27_14-50-24.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=ba2b5abee5018b4b55bd3e136e6673ac" alt="Dashboard - Applications - APIs - Create API - Popup" width="624" height="736" data-path="docs/images/cdy7uua7fh8z/4kIH4BQc4vDel2zhJ6lwCE/094cff6e8e1788c39796eb28ab1925ca/2024-06-27_14-50-24.png" />
</Frame>

Complete la información requerida y haga clic en el botón **Create**.

<div id="signing-algorithms">
  #### Algoritmos de firma
</div>

Cuando creas una API, tienes que seleccionar el algoritmo con el que se firmarán tus tokens. La firma se usa para verificar que el emisor del <Tooltip tip="JSON Web Token (JWT): formato estándar del ID Token (y, a menudo, del token de acceso) que se usa para representar claims de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> es quien dice ser y para garantizar que el mensaje no se haya modificado durante el proceso.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  La firma forma parte de un JWT. Si no conoces la estructura de un JWT, consulta [JSON Web Token Structure](/es/docs/secure/tokens/json-web-tokens/json-web-token-structure).
</Callout>

Para crear la parte de la firma, tienes que tomar el encabezado codificado, la carga útil codificada, un secreto y el algoritmo especificado en el encabezado, y firmarlos. Ese algoritmo, que forma parte del encabezado del JWT, es el que seleccionas para tu API: `HS256` o `RS256`.

* **RS256** es un [algoritmo asimétrico](https://en.wikipedia.org/wiki/Public-key_cryptography), lo que significa que hay dos claves: una pública y una privada (secreta). Auth0 tiene la clave secreta, que se usa para generar la firma, y el consumidor del JWT tiene la clave pública, que se usa para validar la firma.
* **HS256** es un [algoritmo simétrico](https://en.wikipedia.org/wiki/Symmetric-key_algorithm), lo que significa que solo hay una clave secreta, compartida entre las dos partes. La misma clave se usa tanto para generar la firma como para validarla. Debe prestarse especial atención para que la clave siga siendo confidencial.

La práctica más segura, y nuestra recomendación, es usar **RS256**. Algunas de las razones son:

* Con RS256 tienes la certeza de que solo el titular de la clave privada (Auth0) puede firmar tokens, mientras que cualquiera puede comprobar si el token es válido usando la clave pública.
* Con HS256, si la clave secreta compartida se ve comprometida, tendrías que volver a desplegar la API con el nuevo secreto. Con RS256 puedes solicitar un token que sea válido para múltiples audiencias.
* Con RS256 puedes implementar la rotación de claves sin tener que volver a desplegar la API con el nuevo secreto.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Para obtener una descripción más detallada de los algoritmos de firma de JWT, consulta: [JSON Web Token (JWT) Signing Algorithms Overview](https://auth0.com/blog/json-web-token-signing-algorithms-overview/).
</Callout>

<div id="configure-the-permissions">
  ### Configurar los permisos
</div>

Una vez creada la aplicación, deberá configurar los permisos que las aplicaciones pueden solicitar durante la autorización.

En la configuración de su API, vaya a la pestaña **Permissions**. En esta sección puede agregar los cuatro alcances mencionados anteriormente: `read:timesheets`, `create:timesheets`, `delete:timesheets`, `approve:timesheets`.

<Frame>
  <img src="https://mintcdn.com/translations/xwVvTWJUElMm5YAK/docs/images/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/ccbb9bbab29576a96ed8425329ecffb4/dashboard-apis-edit_view-permissions.png?fit=max&auto=format&n=xwVvTWJUElMm5YAK&q=85&s=b9f2abf9032519ff3382e45a2f73596b" alt="Dashboard - Applications - APIs - Permissions" width="1260" height="784" data-path="docs/images/cdy7uua7fh8z/xxMOKezob6gNHJ0CcKhcg/ccbb9bbab29576a96ed8425329ecffb4/dashboard-apis-edit_view-permissions.png" />
</Frame>

<div id="create-the-application">
  ## Crear la aplicación
</div>

Hay cuatro tipos de aplicaciones en Auth0: **Native App** (para aplicaciones móviles o de escritorio), **Single-Page Web App**, **Regular Web App** y **Machine to Machine App** (para CLI, daemons o servicios que se ejecutan en tu backend). En este caso, queremos crear una nueva aplicación para nuestra aplicación móvil, por lo que usaremos Native como tipo de aplicación.

Para crear una nueva aplicación, ve al [dashboard](https://manage.auth0.com/#) y haz clic en la opción de menú [Applications](https://manage.auth0.com/#/applications) de la barra lateral izquierda. Haz clic en el botón **+ Create Application**.

Asigna un nombre a tu aplicación (usaremos `Timesheets Mobile`) y selecciona `Native App` como tipo.

Haz clic en **Create**.

<div id="configure-the-authorization-extension">
  ## Configurar la extensión Authorization Extension
</div>

Asegúrese de que la extensión Authorization Extension esté instalada en su inquilino. Puede consultar la [documentación de Authorization Extension](/es/docs/customize/extensions/authorization-extension) para obtener más información sobre cómo hacerlo.

<div id="define-permissions">
  ### Definir permisos
</div>

Deberá definir permisos que se correspondan con los alcances que ya definió. En la Authorization Extension, haga clic en la pestaña Permissions y, a continuación, en el botón **Create Permission**. En el cuadro de diálogo, introduzca los datos de cada permiso. Asegúrese de que el nombre del permiso sea exactamente el mismo que el del scope correspondiente:

Continúe creando los permisos para todos los alcances restantes:

<div id="define-roles">
  ### Definir roles
</div>

Ve a la pestaña Roles y crea dos roles. Haz clic en el botón **Create Role** y selecciona la aplicación **Timesheets SPA**. Asigna al rol el nombre y la descripción **Employee**, y selecciona los permisos `delete:timesheets`, `create:timesheets` y `read:timesheets`. Haz clic en **Save**.

A continuación, sigue el mismo proceso para crear el rol **Manager** y asegúrate de haber seleccionado todos los permisos:

<Frame>
  <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=358c25585d11bdd92b059d30edd235af" alt="Dashboard - Extensions - Authorization Extension - Create Manager Role" width="2624" height="2024" data-path="docs/images/cdy7uua7fh8z/3ver0yyJpTLypmcIDzwSNt/d880e8ae74e6e973c7ce1c8b0f7e7c87/create-manager-role.png" />
</Frame>

<div id="assign-users-to-roles">
  ### Asignar usuarios a roles
</div>

Deberá asignar todos los usuarios al rol Manager o User. Para ello, vaya a la pestaña Users de la Authorization Extension y seleccione un usuario. En la pantalla de información del usuario, vaya a la pestaña Roles. Puede agregar un rol al usuario haciendo clic en el botón **Add Role to User** y seleccionando el rol correspondiente para ese usuario.

<div id="configuring-the-authorization-extension">
  ### Configuración de la Authorization Extension
</div>

También deberá asegurarse de que la Rule de la Authorization Extension esté publicada. Para ello, haga clic en el avatar de usuario en la esquina superior derecha de la Authorization Extension y seleccione la opción **Configuration**:

Asegúrese de haber habilitado **Permissions** y, a continuación, haga clic en el botón **Publish Rule**.

<div id="create-a-rule-to-validate-token-scopes">
  ### Crear una Rule para validar los alcances del token
</div>

El último paso de este proceso es crear una Rule que valide que los alcances incluidos en un <Tooltip tip="Token de acceso: Credencial de autorización, en forma de cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=Access+Token">Token de acceso</Tooltip> sean válidos según los permisos asignados al usuario. Cualquier alcance que no sea válido para un usuario debe eliminarse del Token de acceso.

En tu <Tooltip tip="Auth0 Dashboard: El producto principal de Auth0 para configurar tus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>, ve a la pestaña Rules. Deberías ver la Rule creada por Authorization Extension.

Haz clic en el botón **Create Rule** y selecciona la plantilla **Empty Rule**. Puedes asignarle un nombre a la Rule, como **Access Token Scopes**, y luego especificar el siguiente código para la Rule:

```javascript lines theme={null}
function (user, context, callback) {
  if (context.clientName !== 'Timesheets SPA') {
    return callback(null, user, context);
  }

  var permissions = user.permissions || [];
  var requestedScopes = context.request.body.scope || context.request.query.scope;
  var filteredScopes = requestedScopes.split(' ').filter( function(x) {
    return x.indexOf(':') < 0;
  });
  Array.prototype.push.apply(filteredScopes, permissions);
  context.accessToken.scope = filteredScopes.join(' ');

  callback(null, user, context);
}
```

El código anterior garantizará que todos los Tokens de acceso solo contengan los alcances con el formato correcto (por ejemplo, `action:area` o `delete:timesheets`) que sean válidos de acuerdo con los permisos del usuario. Cuando termines, puedes hacer clic en el botón **Guardar**.

Las Rules se ejecutan en el orden en que se muestran en la página de Rules, así que asegúrate de que la nueva Rule que creaste esté ubicada debajo de la Rule de Authorization Extension para que se ejecute después de la Rule de Authorization Extension.

TUTORIAL ANTERIOR [1. Descripción general de la solución](/es/docs/get-started/architecture-scenarios/mobile-api/part-1)

SIGUIENTE TUTORIAL [3. Implementación de API + móvil](/es/docs/get-started/architecture-scenarios/mobile-api/api-implementation-nodejs)
