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

> Aprenda cómo funciona el flujo de código de autorización con Proof Key for Code Exchange (PKCE) y por qué debería usarlo en aplicaciones nativas y móviles.

# Flujo de código de autorización con Proof Key for Code Exchange (PKCE)

<Card title="Resumen">
  Conceptos clave

  * Conozca el tipo de concesión de OAuth 2.0, Authorization Code Flow with Proof Key for Code Exchange (PKCE).
  * Use este tipo de concesión en aplicaciones que no pueden almacenar un Secreto del cliente, como las aplicaciones nativas o de una sola página.
  * Revise distintos métodos de implementación con los SDK de Auth0.
</Card>

Cuando los <Tooltip tip="Cliente público: Cliente (aplicación) que no puede almacenar credenciales de forma segura. Algunos ejemplos incluyen una aplicación nativa de escritorio o móvil y una aplicación web del lado del cliente basada en JavaScript (como una aplicación de una sola página (SPA))." cta="Ver glosario" href="/es/docs/glossary?term=public+clients">clientes públicos</Tooltip> (por ejemplo, aplicaciones nativas y de una sola página) solicitan <Tooltip tip="Cliente público: Cliente (aplicación) que no puede almacenar credenciales de forma segura. Algunos ejemplos incluyen una aplicación nativa de escritorio o móvil y una aplicación web del lado del cliente basada en JavaScript (como una aplicación de una sola página (SPA))." cta="Ver glosario" href="/es/docs/glossary?term=access+tokens">tokens de acceso</Tooltip>, surgen problemas de seguridad adicionales que el flujo de código de autorización por sí solo no puede mitigar. Esto se debe a que:

**Aplicaciones nativas**

* No pueden almacenar de forma segura un <Tooltip tip="Secreto del cliente: Secreto que utiliza un cliente (aplicación) para autenticarse con el Servidor de autorización; solo deberían conocerlo el cliente y el Servidor de autorización, y debe ser lo suficientemente aleatorio para que no pueda adivinarse." cta="Ver glosario" href="/es/docs/glossary?term=Client+Secret">Secreto del cliente</Tooltip>. Al descompilar la aplicación, se revelará el <Tooltip tip="Secreto del cliente: Secreto que utiliza un cliente (aplicación) para autenticarse con el Servidor de autorización; solo deberían conocerlo el cliente y el Servidor de autorización, y debe ser lo suficientemente aleatorio para que no pueda adivinarse." cta="Ver glosario" href="/es/docs/glossary?term=Client+Secret">Secreto del cliente</Tooltip>, que está asociado a la aplicación y es el mismo para todos los usuarios y dispositivos.
* Son vulnerables a ataques de interceptación e inyección del código de autorización. Sin un secreto del cliente, un atacante que intercepte el código de autorización puede canjearlo por tokens.
* Pueden usar un esquema de URL personalizado para capturar redirecciones (por ejemplo, MyApp\://), lo que podría permitir que aplicaciones maliciosas reciban un <Tooltip tip="Código de autorización: Cadena aleatoria generada por el servidor de autorización y devuelta a la aplicación como parte de la respuesta de autorización al usar el flujo de código de autorización (ya sea con o sin PKCE)." cta="Ver glosario" href="/es/docs/glossary?term=Authorization+Code">código de autorización</Tooltip> de su <Tooltip tip="Servidor de autorización: Servidor centralizado que contribuye a definir los límites del acceso de un usuario. Por ejemplo, su servidor de autorización puede controlar los datos, las tareas y las funciones disponibles para un usuario." cta="Ver glosario" href="/es/docs/glossary?term=Authorization+Server">Servidor de autorización</Tooltip>. Debido a este riesgo, **Auth0 desaconseja firmemente el uso de esquemas URI personalizados**. Para obtener más información, consulte [Medidas contra la suplantación de identidad de aplicaciones](/es/docs/secure/security-guidance/measures-against-app-impersonation.mdx).

**Aplicaciones de una sola página**

* No pueden almacenar de forma segura un Secreto del cliente porque todo su código fuente está disponible en el navegador.

Dadas estas situaciones, <Tooltip tip="OAuth 2.0: Marco de autorización que define protocolos y flujos de trabajo de autorización." cta="Ver glosario" href="/es/docs/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip> ofrece una versión del flujo de código de autorización que utiliza Proof Key for Code Exchange (PKCE) (definido en [OAuth 2.0 RFC 7636](https://tools.ietf.org/html/rfc7636)).

El flujo de código de autorización mejorado con PKCE introduce un secreto creado por la aplicación que realiza la llamada y que el <Tooltip tip="Servidor de autorización: Servidor centralizado que contribuye a definir los límites del acceso de un usuario. Por ejemplo, su servidor de autorización puede controlar los datos, las tareas y las funciones disponibles para un usuario." cta="Ver glosario" href="/es/docs/glossary?term=authorization+server">servidor de autorización</Tooltip> puede verificar; este secreto se denomina Code Verifier. Además, la aplicación que realiza la llamada crea un valor transformado del Code Verifier, llamado Code Challenge, y envía este valor por HTTPS para obtener un código de autorización. De esta forma, un atacante malicioso solo puede interceptar el código de autorización, pero no puede canjearlo por un token sin el Code Verifier.

<div id="how-it-works">
  ## Cómo funciona
</div>

Dado que el flujo de código de autorización con PKCE se basa en el [flujo de código de autorización estándar](/es/docs/get-started/authentication-and-authorization-flow/authorization-code-flow), los pasos son muy similares.

<Frame>
  <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3pstjSYx3YNSiJQnwKZvm5/33c941faf2e0c434a9ab1f0f3a06e13a/auth-sequence-auth-code-pkce.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=6c413640df1409aac6572a553bae4164" alt="Flujos - Authorization Code con PKCE - Diagrama de secuencia de autorización" width="1500" height="1220" data-path="docs/images/cdy7uua7fh8z/3pstjSYx3YNSiJQnwKZvm5/33c941faf2e0c434a9ab1f0f3a06e13a/auth-sequence-auth-code-pkce.png" />
</Frame>

1. El usuario hace clic en **Iniciar sesión** dentro de la aplicación.
2. El SDK de Auth0 crea un `code_verifier` aleatorio desde el punto de vista criptográfico y, a partir de él, genera un `code_challenge`.
3. El SDK de Auth0 redirige al usuario al Servidor de autorización de Auth0 ([endpoint `/authorize`](https://auth0.com/docs/api/authentication#authorization-code-grant-pkce-)) junto con el `code_challenge`.
4. Tu Servidor de autorización de Auth0 redirige al usuario a la pantalla de inicio de sesión y autorización.
5. El usuario se autentica mediante una de las opciones de inicio de sesión configuradas y puede ver una página de consentimiento con la lista de permisos que Auth0 otorgará a la aplicación.
6. Tu Servidor de autorización de Auth0 almacena el `code_challenge` y redirige al usuario de vuelta a la aplicación con un `code` de autorización, válido para un solo uso.
7. El SDK de Auth0 envía este `code` y el `code_verifier` (creado en el paso 2) al Servidor de autorización de Auth0 `(`[`endpoint /oauth/token`](https://auth0.com/docs/api/authentication?http#authorization-code-flow-with-pkce44)).
8. Tu Servidor de autorización de Auth0 verifica el `code_challenge` y el `code_verifier`.
9. Tu Servidor de autorización de Auth0 responde con un token de ID y un token de acceso (y, opcionalmente, un token de actualización).
10. Tu aplicación puede usar el token de acceso para llamar a una API y acceder a información sobre el usuario.
11. La API responde con los datos solicitados.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si tienes habilitada la [rotación de Token de actualización](/es/docs/secure/tokens/refresh-tokens/refresh-token-rotation), 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 esa relación.
</Callout>

<div id="how-to-implement-it">
  ## Cómo implementarlo
</div>

La forma más sencilla de implementar el flujo de código de autorización con PKCE es [seguir nuestras guías de inicio rápido para aplicaciones nativas](/es/docs/quickstart/native) o [seguir nuestras guías de inicio rápido para aplicaciones de una sola página](/es/docs/quickstart/spa).

Según el tipo de aplicación, también puede usar nuestros SDK para móviles o aplicaciones de una sola página:

**Móvil**

* [SDK de Auth0 para Swift](/es/docs/libraries/auth0-swift)
* [SDK de Auth0 para Android](/es/docs/libraries/auth0-android)

**Aplicación de una sola página**

* [SDK de Auth0 para aplicaciones de una sola página](/es/docs/libraries/auth0-single-page-app-sdk)
* [SDK de Auth0 para React](/es/docs/libraries/auth0-react)

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Los avances recientes en los controles de privacidad del usuario en los navegadores afectan negativamente a la experiencia de usuario al impedir el acceso a cookies de terceros; por lo tanto, los flujos basados en navegador deben usar la [rotación de Token de actualización](/es/docs/secure/tokens/refresh-tokens/refresh-token-rotation), que proporciona un método seguro para usar tokens de actualización en las SPA y, al mismo tiempo, ofrece a los usuarios finales acceso ininterrumpido a los recursos sin las interrupciones en la experiencia de usuario causadas por tecnologías de privacidad del navegador como ITP.
</Callout>

Puede seguir nuestros tutoriales para usar nuestros endpoints de API y [agregar el inicio de sesión mediante el flujo de código de autorización con PKCE](/es/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/add-login-using-the-authorization-code-flow-with-pkce) o [llamar a su API mediante el flujo de código de autorización con PKCE](/es/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce/call-your-api-using-the-authorization-code-flow-with-pkce).

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

* [Auth0 Rules](/es/docs/customize/rules)
* [Auth0 Hooks](/es/docs/customize/hooks)
* [Tokens](/es/docs/secure/tokens)
* [Prácticas recomendadas para tokens](/es/docs/secure/tokens/token-best-practices)
* [¿Qué flujo de OAuth 2.0 debo usar?](/es/docs/get-started/authentication-and-authorization-flow/which-oauth-2-0-flow-should-i-use)
