¿Cuál es la mejor estrategia de autenticación de usuario para una aplicación isomórfica React / Redux?

Por lo general, juego 20 preguntas (generalmente terminaré con una lista más larga de preguntas y viceversa) cuando trabajo con el equipo de desarrollo para elaborar una estrategia / arquitectura de seguridad correcta. Así que juguemos 20 preguntas.

a) ¿Desea autenticar usuarios en su aplicación?

b) ¿Desea autorizar lo que un usuario puede o no puede hacer en su aplicación? incluidos, entre otros, el acceso a páginas web, datos que el usuario puede o no puede ver, etc.

c) ¿De dónde obtiene los datos? ¿Desde su propia aplicación o desde un servicio de terceros diferente? (podría ser su servicio alojado por otra aplicación u otro dominio)

d) ¿Cuáles son los mecanismos de seguridad para dichos Servicios? (Suponiendo REST)

e) ¿Los datos devueltos por dichos servicios son globales, es decir, para que cualquiera los vea o solo solicite al usuario? Un buen ejemplo sería que la API de Twitter para obtener tweets podría ser pública, lo que puede devolver todos los Tweets públicos, pero la API para obtener solo sus tweets debería funcionar dentro del contexto de su identidad.

Ahora tienes idea. La seguridad de su aplicación tiene algún tipo de relación directa con los servicios en los que se basa su aplicación. Ya sea 1: 1 (datos específicos de usuario final a usuario final servidos a través de REST API) o Muchos: 1 (Muchos usuarios finales pero una aplicación confiable puede obtener todos los datos y enviarlos a su aplicación)

Con esto en mente, debe hacer la siguiente pregunta. ¿Quién proporciona la capa de autorización a su API REST? Recuerde que cuando usa OAuth / OPennID con proveedores de autenticación social como Facebook / Twitter, etc., su aplicación solo obtiene un comportamiento de tipo de inicio de sesión único, y aún debe crear su propio token interno que pueda mantener la sesión / identidad / contexto de usuario autenticado. ¿Cómo se une la capa OAuth del proveedor de Identidad Social con su aplicación?

La siguiente pregunta es, cuando tiene que invocar servicios externos de terceros, es para el usuario final o para su aplicación. La verdadera pregunta es si necesita propagación de identidad o no.

Estas preguntas lo ayudarán a comprender si una solución de OAuth en particular es lo suficientemente buena para usted o no. Nota para aquellos que son nuevos en OAuth, no se trata de autenticación, todo se trata de Autorización.

La estrategia de autenticación de usuario que elija, especialmente si recién está configurando, debería ser simple. Eso no significa que esté lleno de agujeros de bala o cabos sueltos, solo significa simple.

La estrategia simple de Passport es, bien simple y efectiva. Solo asegúrate de que estás utilizando las contraseñas y haciendo todas las transacciones entre el cliente y el servidor a través de SSL / TLS. Si necesita oAuth, hay muchas extensiones para Passport.

Re: Auth0, nunca he usado su servicio, pero según el vistazo rápido a sus documentos, parece que su solución Node no es solo del lado del cliente.

Auth0 Node.js SDK Quickstarts: Iniciar sesión

Incluso utiliza, pasaporte, curiosamente. Aunque realmente no creo que sea demasiado difícil configurar Passport de forma independiente para que no pague por un servicio adicional.

Sí, hay cientos de capas adicionales de seguridad para agregar si es necesario. Sí, debe ir a la capa adicional en su infraestructura y poner en la lista blanca solo ciertas áreas. Etc. Etc. pero en lo que respecta a su aplicación individual: al principio, comience de manera simple (no fácil o insegura) y desarrolle la complejidad que necesite.

Si no comprende su solución de seguridad, ¿es segura?

-J Cole Morrison

Guías tecnicas y pensamientos

Usamos JWT para autorizar a los usuarios del tablero. Tablero construido con React y Redux.

  1. Panel de solicitud de solicitud de envío a REST API
  2. API envía un mensaje con enlace (con JWT)
  3. Cuando hago clic en un enlace, mi aplicación verificará y almacenará JWT en sesión

Así es como funciona en Cezerin: solución de comercio electrónico React and Node.js.