¿Qué es un Token de acceso?
Un Token de acceso (también denominado
access_token) es una cadena opaca que representa una autorización emitida a la aplicación. Puede ser un identificador utilizado para recuperar la información de autorización o puede contener por sí mismo la información de autorización (por ejemplo, la identidad del usuario, los permisos, etc.) de forma verificable.Es bastante común que los Tokens de acceso se implementen como JSON Web Tokens.Para obtener más información sobre los Tokens de acceso de Auth0, consulte Access Token.scope.
Posteriormente, cuando el cliente envía el Token de acceso al hacer solicitudes a la API, la API puede inspeccionar el claim scope para garantizar que se hayan concedido los permisos necesarios para invocar ese endpoint específico de la API.
¿Qué son los alcances?
Cada Token de acceso puede incluir una lista de los permisos que se han concedido al cliente. Cuando un cliente se autentica con Auth0, especifica la lista de alcances (o permisos) que solicita. Si esos alcances están autorizados, el Token de acceso contendrá una lista de alcances autorizados.Por ejemplo, la API de registros de horas puede aceptar cuatro niveles distintos de autorización: leer registros de horas (scope
read:timesheets), crear registros de horas (scope create:timesheets), eliminar registros de horas (scope delete:timesheets) y aprobar registros de horas (scope approve:timesheets).Cuando un cliente solicita a la API crear una nueva entrada de registro de horas, el Token de acceso debe contener el alcance create:timesheets. De forma similar, para eliminar registros de horas existentes, el Token de acceso debe contener el alcance delete:timesheets.Para obtener más información sobre los alcances, consulte Scopes.Roles de OAuth
En cualquier flujo de OAuth 2.0, podemos identificar los siguientes roles:
- Propietario del recurso: la entidad que puede conceder acceso a un recurso protegido. Normalmente, es el usuario final.
- Servidor de recursos: el servidor que aloja los recursos protegidos. Es la API a la que quiere acceder.
- Cliente: una aplicación que solicita acceso a un recurso protegido en nombre del Propietario del recurso.
- Servidor de autorización: el servidor que autentica al Propietario del recurso y emite tokens de acceso tras obtener la autorización correspondiente. En este caso, la API de autenticación de Auth0.
Prueba de clave para intercambio de código (PKCE)
authorization_code devuelto por Auth0 e intercambiarlo por un Token de acceso (y posiblemente un Token de actualización).
La prueba de clave para intercambio de código (PKCE) (definida en RFC 7636) es una técnica que se utiliza para mitigar este ataque de interceptación del código de autorización.
Con PKCE, la aplicación crea, para cada solicitud de autorización, una clave aleatoria criptográficamente segura denominada code_verifier y su valor transformado, denominado code_challenge, que se envía a Auth0 para obtener el authorization_code. Cuando la aplicación recibe el authorization_code, envía el código y el code_verifier al de Auth0 para intercambiarlos por los tokens solicitados.

- La aplicación nativa inicia el flujo y redirige al usuario a Auth0 (específicamente al endpoint /authorize), enviando los parámetros
code_challengeycode_challenge_method. - Auth0 redirige al usuario a la aplicación nativa con un
authorization_codeen la cadena de consulta. - La aplicación nativa envía el
authorization_codey elcode_verifier, junto con elredirect_uriy elclient_id, a Auth0. Esto se hace mediante el endpoint /oauth/token. - Auth0 valida esta información y devuelve un Token de acceso (y, opcionalmente, un Token de actualización).
- La aplicación nativa puede usar el Token de acceso para llamar a la API en nombre del usuario.
Si tiene habilitada la rotación de Token de actualización, se genera un nuevo Token de actualización con cada solicitud y se emite junto con el Token de acceso. Cuando se intercambia un Token de actualización, el Token de actualización anterior se invalida, pero el Servidor de autorización conserva información sobre la relación entre ambos.