Se envía de vuelta al navegador porque es esencial hacerlo de esta manera.
Puede ser una locura, pero toda la seguridad de OAuth / OpenId se basa en el hecho de que su navegador hará la redirección correcta.
Veamos un ataque si no usa el navegador como una redirección, pero primero definamos una versión simplificada del "marco" de OAuth para nuestro ejemplo.
- Cliente: la aplicación a la que desea conectarse
- navegador: tu navegador ...
- Proveedor: el proveedor de OAuth (Ej .: Google o Facebook)
- Mal: el atacante.
El flujo normal
- El navegador le pide al cliente que inicie sesión
- Navegador de redirección del cliente al proveedor
- El navegador de autenticación del proveedor luego redirige al Cliente con el token
- El cliente se comunica con el proveedor dando el token de autorización.
- Autorización de concesión de cliente al navegador.
Tu flujo
- El navegador le pide al cliente que inicie sesión
- Navegador de redirección del cliente al proveedor
- El proveedor autentica el navegador y envía el token al cliente dándole la autorización
- Autorización de concesión de cliente para navegador
El problema aquí es que el cliente no está seguro de que el navegador con el que se está comunicando es el mismo que se autentica con el proveedor.
Un ataque en tu flujo
- El navegador accede al mal por alguna mala razón
- Evil impersonate Browser y pide al Cliente que inicie sesión.
- El cliente envía un enlace de redireccionamiento a Evil
- El mal reenvía el enlace al navegador que lo redirecciona a Proveedor
- El proveedor autentica el navegador y envía el token al Cliente dándole la autorización
- Autorización de concesión de cliente para Evil pensando que es un navegador
¿Ves el problema en el último paso?
Esto no habría ocurrido si estuviera utilizando una redirección del navegador para enviar el token al cliente. Al utilizar una redirección del navegador, se asegura de que el Navegador que se autentica con el Proveedor sea el mismo que intenta obtener la autorización correcta con el Cliente.
Este es un paso crucial. Especialmente ya que muchos proveedores enviarán el token automáticamente después de la primera vez si inicias sesión. Por lo tanto, Evil podría obtener acceso a tu cuenta solo al visitar su página y ni siquiera lo sabrías.
El mismo ataque con flujo normal
- El navegador accede al mal por alguna mala razón
- Evil impersonate Browser y pide al Cliente que inicie sesión.
- El cliente envía un enlace de redireccionamiento a Evil
- El mal reenvía el enlace al navegador que lo redirecciona a Proveedor
- El navegador de autenticación del proveedor luego redirige al Cliente con el token
- El cliente se comunica con el proveedor dando el token de autorización.
- Autorización de concesión de cliente al navegador.
Aquí el mal se eclipsó al final debido a la redirección. Esta es la razón por la que los protocolos realizan tantas comprobaciones en la URL de redireccionamiento para asegurarse de que no se redireccionarán a un sitio malicioso que robe el token de autorización.
OAuth / OpenId lo protege de nuevo al intento de phishing. Pero solo pueden hacerlo porque su navegador está haciendo la redirección correcta. En la aplicación de escritorio / móvil esto no funciona realmente, por lo tanto, los protocolos son menos seguros en la aplicación de escritorio / móvil.
Específicamente, protege al Cliente contra intentos de phishing. El cliente debe tomar una decisión muy difícil: ¿el navegador solicita la autorización igual que el navegador que se autentica con el proveedor? Y lo único que ayuda al cliente a hacer eso es la redirección y el hecho de que su navegador es seguro.
Ya que protege directamente al Cliente contra el phishing, lo protege indirectamente.