node con autenticacion node.js routes

node.js - con - jwt node express



Organizar rutas con middleware de autenticación (2)

Tengo muchas rutas La mayoría de ellos requiere autenticación. Uno no.

Aquí están:

router.get(''/secure1'', function (req,res) {...}) router.get(''/secure2'', function (req,res) {...}) router.get(''/secure3'', function (req,res) {...}) router.get(''/:id'', function (req,res) {...})

1. Imaginemos que no tenía la ruta pública.

En la parte superior de la página, podría poner un middleware de comprobación de seguridad, y todo está bien. Solo permitirá conexiones seguras y redireccionará no seguro.

router.use(function (req,res,next) { securityCheck() next() }) router.get(''/secure1'', function (req,res) {...}) router.get(''/secure2'', function (req,res) {...}) router.get(''/secure3'', function (req,res) {...}) router.get(''/:id'', function (req,res) {...})

Esto funcionaría esto hace que todas las rutas seguras sean seguras, pero me bloquea de la ruta pública (''/: id'').

2. Podría mover la ruta pública a la cima:

router.get(''/:id'', function (req,res) {...}) router.use(function (req,res,next) { securityCheck() next() }) router.get(''/secure1'', function (req,res) {...}) router.get(''/secure2'', function (req,res) {...}) router.get(''/secure3'', function (req,res) {...})

Pero de esta forma capta todas mis solicitudes y todos los caminos seguros son inaccesibles.

3. Podría poner un middleware en cada ruta segura, pero eso parece un poco tedioso y propenso a errores humanos:

router.get(''/secure1'',securityCheck(), function (req,res) {...})

Entonces, ¿hay una opción mejor que no consideré? ¿Qué se considera la mejor práctica?

Gracias


Si /:id debe coincidir con un patrón particular, digamos un ObjectId MongoDB, puede hacer que la coincidencia sea más específica para que no coincida con las otras rutas:

router.get(''/:id([a-fA-F0-9]{24})'', function (req,res) {...})

Si desea hacer coincidir ObjectId o nada, puede usar esto:

router.get(''/:id(|[a-fA-F0-9]{24})'', ...);

Más información aquí ( path-to-regexp es el módulo que Express usa para realizar la coincidencia de URL).


De sus opciones, yo personalmente preferiría la primera. En el middleware siempre puede verificar en req.path o req.url para elegir qué configurar como seguro.

Otra opción es usar autenticación HTTP como en .htaccess. Eche un vistazo a https://github.com/http-auth/http-auth .

Una forma en que he hecho la autenticación antes era pasar nombre de usuario / contraseña sobre el cuerpo de la solicitud como json una vez y luego producir un token sin estado para futuras solicitudes ( https://github.com/auth0/node-jsonwebtoken ). En mi caso, no muchas de las entradas de enrutadores necesitaban autenticación, así que las manejé en las entradas mismas.

Además, para mayor seguridad, use HTTPS o codifique sus datos. P.ej. ¿Cómo crear un servidor HTTPS en Node.js?

Espero que haya sido de ayuda!