> ## 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 con SPA + API

# Configuración de Auth0 (SPA + 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>

Vaya a la [sección APIs](https://manage.auth0.com/#/apis) del Dashboard y haga clic en el botón **Create API**.

Se le pedirá que proporcione 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 realizará llamadas a su API. Este valor no se puede modificar después.
* **<Tooltip tip="Algoritmo de firma: algoritmo utilizado 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 con el que se firman 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 [Algoritmos de firma](/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 - Ventana emergente" 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="configure-the-scopes">
  ## Configura los alcances
</div>

Una vez creada la aplicación, tendrás que configurar los alcances que pueden solicitar las aplicaciones durante la autorización.

En la configuración de tu API, ve a la pestaña permiso. En esta sección puedes agregar los alcances para nuestro caso de uso: `read:timesheets`, `create:timesheets`, `delete:timesheets` y `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 - Aplicaciones - APIs - permiso" 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:

* **Aplicación nativa** (utilizada por aplicaciones móviles o de escritorio),
* **Aplicación web de una sola página**,
* **Aplicación web tradicional** y
* **Aplicación Machine to Machine** (utilizada por CLI, daemons o servicios que se ejecutan en su backend).

Para este escenario, queremos crear una nueva aplicación para nuestra SPA, por lo que usaremos Single-Page Application como tipo de aplicación.

Para crear una nueva aplicación, vaya al [Dashboard](https://manage.auth0.com/#) y haga clic en la opción de menú [Applications](https://manage.auth0.com/#/applications) del lado izquierdo. Haga clic en el botón **+ Create Application**.

Asigne un nombre a su aplicación (usaremos `Timesheets SPA`) y seleccione `Single-Page Web App` como tipo.

Haga clic en **Create**.

Eso es todo por ahora. Cuando terminemos con la implementación de la SPA, volveremos al Dashboard y a la configuración de esta aplicación para hacer algunos cambios.

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

Debe asegurarse de que la 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>

Ahora definirá los permisos requeridos, de acuerdo con los alcances que ya definió: `read:timesheets`, `create:timesheets`, `delete:timesheets` y `approve:timesheets`.

En Authorization Extension, haga clic en la pestaña **Permisos** y, a continuación, en el botón **Crear permiso**.

En el cuadro de diálogo, complete los datos de cada permiso.

Asegúrese de que el nombre del permiso sea exactamente el mismo que el del alcance correspondiente:

<Frame>
  <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6G4X14X3A73IDRwOrkmttq/e0c20c44a32e0b39a6d8fb72731ffbaf/create-permission.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=8d4494794edc7f100262161e743f40a5" alt="Dashboard - Extensions - Authorization Extension - Create Permission" width="1264" height="794" data-path="docs/images/cdy7uua7fh8z/6G4X14X3A73IDRwOrkmttq/e0c20c44a32e0b39a6d8fb72731ffbaf/create-permission.png" />
</Frame>

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

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

A continuación, configuraremos los dos roles: employee y manager.

Ve a la pestaña **Roles**, haz clic en el botón **Create Role** y selecciona la aplicación **Timesheets SPA**.

Configura **Name** y **Description** con el valor `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 un rol `Manager` y asegúrate de haber seleccionado todos los permisos.

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

Debe asignar todos los usuarios al rol `Manager` o al rol `Employee`.

Puede hacerlo yendo a la pestaña **Users** de Authorization Extension y seleccionando un usuario.

En la pantalla de información del usuario, vaya a la pestaña **Roles**. Haga clic en **Add Role to User** y seleccione el rol correspondiente.

<div id="configuring-the-authorization-extension">
  ### Configurar Authorization Extension
</div>

También deberá asegurarse de que la Rule de Authorization Extension esté publicada.

Para ello, haga clic en el avatar de su usuario en la esquina superior derecha de Authorization Extension y seleccione **Configuration**.

Asegúrese de que **permiso** esté habilitado y, a continuación, haga clic en **Publicar Rule**.

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

El paso final de este proceso es crear una Rule para comprobar si los alcances contenidos en un <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> son válidos en función de 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 la 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) {
  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;
  });

  var allScopes = filteredScopes.concat(permissions);
  context.accessToken.scope = allScopes.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 haya terminado, puede hacer clic en el botón **Guardar**.

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