Saltar al contenido principal

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.
Cuando los (por ejemplo, aplicaciones nativas y de una sola página) solicitan , 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 . Al descompilar la aplicación, se revelará el , 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 de su . 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.
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, 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). 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 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.

Cómo funciona

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, los pasos son muy similares.
Flujos - Authorization Code con PKCE - Diagrama de secuencia de autorización
  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) 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).
  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.
Si tienes 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 esa relación.

Cómo implementarlo

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 o seguir nuestras guías de inicio rápido para aplicaciones de una sola página. 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 Aplicación de una sola página
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, 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.
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 o llamar a su API mediante el flujo de código de autorización con PKCE.

Más información