Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

State, nonce y protección del retorno

5 tareas · 40 min · Principiante

El retorno es la ruta del cliente que recibe la respuesta de autorización, y lo puede abrir cualquiera con un enlace. Lo que lo protege es comprobar que la respuesta pertenece a un inicio que empezó ese mismo navegador, que el token de identidad es de ese inicio y que viene del proveedor al que se fue. Reservas Ocavita te entrega el código de inicio y retorno de su web, la configuración publicada de sus dos proveedores, los retornos de una mañana y la queja de una huésped que terminó dentro de la cuenta de otra persona.

0 de 5 · 0%

Objetivo de la sala

El retorno es la ruta del cliente que recibe la respuesta de autorización, y lo puede abrir cualquiera con un enlace. Lo que lo protege es comprobar que la respuesta pertenece a un inicio que empezó ese mismo navegador, que el token de identidad es de ese inicio y que viene del proveedor al que se fue. Reservas Ocavita te entrega el código de inicio y retorno de su web, la configuración publicada de sus dos proveedores, los retornos de una mañana y la queja de una huésped que terminó dentro de la cuenta de otra persona.

Tres valores atan la respuesta al inicio, y cada uno responde una pregunta distinta. El state es un valor aleatorio que el cliente guarda en la sesión del navegador y recibe de vuelta en el retorno: responde «¿esta respuesta es de un inicio que yo empecé aquí?». El nonce es otro valor aleatorio que el cliente envía y que el proveedor copia dentro del token de identidad: responde «¿este token es de ese inicio y no uno viejo reutilizado?». El verificador de PKCE responde «¿quien canjea el código es quien lo pidió?».

RFC 9700 admite que PKCE haga también de protección contra peticiones cruzadas en el retorno, pero solo si el servidor de autorización lo exige siempre; si no, el cliente debe usar state o nonce. Los tres tienen en común algo que suele olvidarse: valen solo si son únicos por inicio y si su ausencia se trata como fallo.

Responde para continuar

¿Qué pregunta responde el nonce de OpenID Connect?

Ver pista de ayuda

Piensa en dónde termina copiado el nonce.

Un nonce sirve porque solo el navegador que empezó el inicio lo conoce. Si es una constante, cualquier token de identidad que ese proveedor emita para esa aplicación lo trae, y la comprobación del retorno pasa con el token de cualquier persona. La razón que dejó escrita el equipo en el comentario es un malentendido frecuente: el proveedor exige que el valor vaya, no que sea siempre igual.

Abre retorno.py y busca qué valor se envía como nonce y con qué se compara después.

Responde para continuar

¿Qué valor envía la web como nonce en todos los inicios de sesión? Escríbelo tal como aparece.

El state se comprueba en el retorno: se saca de la sesión y se compara con el recibido. La pregunta importante es qué pasa cuando en la sesión no hay ninguno, que es justo lo que ocurre cuando alguien abre un enlace de retorno preparado en otro navegador: la persona queda dentro de una cuenta que no es suya y todo lo que guarde después se va a esa cuenta. La regla segura es fallar cerrado: sin state guardado, el retorno se rechaza.

Lee la condición del retorno en retorno.py, cruza registro-retornos.txt y compara con queja-QJ-882.txt.

Responde para continuar

¿Qué sesión completó un retorno sin haber pasado por el inicio y terminó con una tarjeta guardada? Escribe su identificador.

Cuando un cliente trabaja con varios servidores de autorización y recibe todas las respuestas en la misma ruta, necesita saber de cuál viene cada una antes de canjear el código; si no, puede mandar un código al punto de token equivocado o confiar en una respuesta que no es del proveedor al que envió a la persona. Es la confusión entre proveedores que describe RFC 9700. La defensa que recomienda es que el servidor se identifique dentro de la respuesta de autorización, como define RFC 9207, y que el cliente compare ese valor con el emisor al que envió a la persona; la alternativa más débil es una ruta de retorno distinta por proveedor.

Cruza metadatos.txt y registro-retornos.txt con lo que lee retorno.py de la respuesta.

Responde para continuar

¿Qué parámetro de la respuesta anuncian los dos proveedores y llega en el registro, pero retorno.py nunca lee?

El retorno que encontraste en la tarea 3 no tenía state ni verificador en la sesión, y aun así el canje y la validación del token de identidad pasaron. Lee la nota de Quiba en metadatos.txt, la línea de ese retorno en el registro y la comparación del nonce en retorno.py.

Responde para continuar

¿Qué combinación dejó pasar ese retorno sin inicio?

Ver pista de ayuda

Mira de qué proveedor era la respuesta según el registro.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad