Cómo generar code_verifier y code_challenge para la autorización OIDC

Puedes generar code_verifier y code_challenge para la autorización OIDC de la siguiente manera. Los siguientes códigos también están disponibles en Gist.

JavaScript

F#

Python

Ruby

Shell Script


PKCE, Clave de Prueba para el Intercambio de Códigos

El verificador de código y el desafío de código son elementos que se utilizan en el mecanismo PKCE. PKCE es una mejora de seguridad para los flujos de autorización de OAuth 2.0 y OpenID Connect (OIDC). Se utiliza principalmente para protegerse contra los ataques de interceptación de código de autorización.

Así es como funciona.

Flujo de Código de Autorización

  • En el flujo de código de autorización estándar de OAuth 2.0, una aplicación cliente solicita un código de autorización al servidor de autorización.
  • El código de autorización luego se intercambia por un token de acceso.
  • Sin embargo, este flujo es vulnerable a ataques de interceptación, especialmente en aplicaciones móviles o de una sola página.

PKCE al Rescate

  • PKCE introduce un paso adicional antes de intercambiar el código de autorización por un token de acceso.
  • El cliente genera un verificador de código aleatorio y calcula su valor hash (el desafío de código).
  • El verificador de código se envía al servidor de autorización durante la solicitud de autorización inicial.
  • El servidor almacena el desafío de código asociado con el código de autorización.
  • Cuando el cliente intercambia el código de autorización por un token de acceso, también debe enviar el verificador de código original.
  • El servidor verifica que el verificador de código coincida con el desafío de código almacenado.

¿Por qué es importante PKCE?

  • PKCE evita que los atacantes intercepten el código de autorización y lo utilicen para obtener un token de acceso.
  • Incluso si un atacante captura el código de autorización, no tendrán el verificador de código correspondiente.
  • Esto hace que sea mucho más difícil realizar el robo de tokens.

Uso

  • Se recomienda PKCE para todos los clientes públicos (por ejemplo, aplicaciones móviles, aplicaciones de una sola página) que utilizan el flujo de código de autorización.
  • Los clientes confidenciales (por ejemplo, aplicaciones del lado del servidor) también pueden usar PKCE para una seguridad adicional.

Recuerde, PKCE es como un apretón de manos secreto entre su aplicación y el servidor de autorización, asegurando que solo el destinatario previsto pueda completar el proceso de autorización.