Cree una sesión web desde un sitio web de un tercero utilizando un token oauth2 existente

4

Estamos intentando permitir que una aplicación web de terceros de confianza autentique automáticamente a los usuarios en nuestra propia aplicación. Pensamos en utilizar auth2 para esa materia.

En nuestro escenario, proporcionaríamos un servidor oauth2 y el saludo inicial se vería de esta manera (que es el mecanismo habitual de 3 patas de oauth2). Digamos que acme es el nombre de nuestro servicio.

  1. La aplicación de terceros tiene un botón connect to acme
  2. El usuario hace clic en ese botón y se redirige al servicio ACME
  3. El usuario inicia sesión a través del inicio de sesión basado en formulario en el sitio acme
  4. El servicio Acme presenta al usuario el diálogo 3rd party wants to access your account
  5. El usuario hace clic en accept
  6. El servicio Acme genera un token oauth2 y redirige a terceros
  7. el tercero almacena el token generado para futuras interacciones con el servicio acme

Ahora, si la sesión en el sitio web de acme ha caducado, la aplicación de terceros podría volver a autenticar automáticamente al usuario en la aplicación web de acme enviando una solicitud ajax a un punto final de autenticación en el servidor de acme.

Enviará el token previamente almacenado a través de https como un encabezado http al punto final acme, donde el servidor oauth2 validará el token y autentificará al usuario asociado en la aplicación web.

Nos preguntamos si esto implica algún problema de seguridad o si se trata de un patrón seguro auth2 para volver a autenticar automáticamente tokens oauth2 existentes con un sitio web de proveedores oauth2.

    
pregunta pulse00 09.10.2015 - 13:01
fuente

1 respuesta

2

Has confundido un poco las cosas. En OAuth2, tienes 3 cosas:

  • Proveedor de servicios OAuth2 (acme en su ejemplo)
  • Cliente OAuth2 (tercero en su ejemplo)
  • Usuario OAuth2 (el navegador del usuario físico en su ejemplo)

Ahora, lo que sucede es que siempre es el cliente el que se autentica con el proveedor del servicio y luego el cliente autentica al usuario en su aplicación. El cliente autentica al usuario en su aplicación ya sea por sí mismo (por ejemplo, variable de sesión) o reenviando constantemente el token de acceso al proveedor de servicios.

  

Ahora, si la sesión en el sitio web de acme ha caducado, la aplicación de terceros   Podríamos volver a autenticar automáticamente al usuario en la web de ACME.   aplicación mediante el envío de una solicitud ajax a un punto final de autenticación   en el servidor acme.

La redacción de esa parte es extraña. Parece que es el cliente el que controla el proveedor de servicios, lo que no tiene sentido. El cliente realmente no tiene ningún control sobre el proveedor de servicios. Si la sesión de un proveedor de servicios ha caducado y el cliente le pregunta al proveedor de servicios si un usuario en particular todavía está conectado, entonces el proveedor de servicios simplemente le dirá que ya no está conectado.

Ahora, lo que probablemente quisiste decir es:

La sesión del usuario con el cliente (tercero) ha caducado, ¿cómo puedo volver a autenticarlo automáticamente si el usuario todavía está autenticado con el proveedor de servicios?

Bueno, hay un par de formas, pero primero hablemos sobre el token de acceso. Lo que el usuario recibe del proveedor de servicios y luego lo pasa al cliente es un token de acceso. Los tokens de acceso a menudo tienen un tiempo de validez limitado por múltiples razones, haga clic aquí:

enlace

La forma de obtener un nuevo token de acceso depende del proveedor de servicios. A veces, el cliente recibe un token de actualización que puede usarse para recibir un nuevo token de acceso. Ver google api por ejemplo:

enlace

Con otros proveedores, la cadena de redireccionamiento podría ser automática si el usuario todavía está conectado con el proveedor de servicios. Entonces, mientras hace todo el protocolo OAuth2 todo de nuevo, el usuario solo ve una recarga de la página.

Nota adicional

Vi que mencionaste la palabra "ajax" en tu pregunta. No hay ajax en OAuth2 ya que la seguridad depende de que el redireccionamiento completo funcione correctamente. Además, es el cliente el que envía el token de acceso al proveedor de servicios. El cliente es un servidor web, no hace una solicitud ajax como lo hacemos cuando usamos un navegador. Y finalmente, el usuario no puede enviar el token de acceso para autenticarse por tantas razones ...

    
respondido por el Gudradain 09.10.2015 - 15:23
fuente

Lea otras preguntas en las etiquetas