Envío de tokens de acceso desde el servidor a las mejores prácticas del cliente

2

Estoy tratando de escribir una aplicación que permita a un usuario ver múltiples bandejas de entrada de Gmail a la vez. Estoy almacenando el token de actualización para cada cuenta en mi base de datos.

Sin embargo, me gustaría que casi todo el tráfico hacia y desde Gmail pase por el navegador, no quiero que el paso innecesario del servidor sea recuperar el correo y enviarlo al cliente, ya que no haré nada con el lado del servidor de correos electrónicos.

Este es el mismo token (o el mismo tipo de) que el usuario obtendría si tuviera acceso a la recuperación de token en el cliente. Entonces, cuando el usuario inicia sesión, ¿es seguro tomar un servidor del token de acceso y enviarlo al cliente (por supuesto, a través de HTTPS)? Si no, ¿cuál sería la mejor práctica aquí?

  • Incluso podría especular que esto es "más" seguro que almacenar el token de acceso en una cookie o almacenamiento local. Los usuarios se autentican con mi aplicación a través de un JWT, luego realizan un GET a mi servidor para el token de acceso de Gmail. Así que el token de acceso de Gmail nunca se almacena en ningún lado del cliente. ¿Alguna corrección?
pregunta Greg Pete 26.08.2016 - 05:42
fuente

1 respuesta

2

No puedes hacer esto, y explicaré por qué. Supongo que estamos hablando de OAUTH2, que declara claramente lo que puede y no puede hacerlo con un token. OAUTH2 divide a los clientes en cinco categorías:

  • Confidencial
  • Público
  • aplicación web
  • Aplicación de navegador (lado del cliente)
  • Aplicación nativa (lado del cliente)

Cada uno de estos utiliza sus propios métodos de autorización para obtener la clave de acceso (tipos de concesión). Antes de que pueda consultar un token de autorización, debe haber registrado la aplicación en Google y obtener un ID de cliente (y un secreto) a cambio.

Llegando al punto; cuando registró el cliente, eligió una categoría de cliente y supongo que la aplicación web (credencial del cliente) se basa en su tema. Sin embargo, una vez que haya elegido un tipo, usted se compromete a usar cualquier tokens solo para ese tipo de cliente. Si tuviera que enviar el token de acceso desde el servidor al cliente, rompe esa promesa.

OAUTH2 divide los tipos de clientes por una razón, principalmente basada en la seguridad y la capacidad de mantener en secreto los tokens por algún tiempo. Si desea almacenar el token de acceso en el lado del cliente, cambie a Implícito . Obviamente, no puede usar la clave en el servidor para el mismo propósito.

La imagen de abajo muestra las diferencias.

    
respondido por el Yorick de Wid 26.08.2016 - 10:04
fuente

Lea otras preguntas en las etiquetas