Método de autenticación simple para proteger la API REST

7

Intenté desesperadamente encontrar un método simple para proteger mi API, pero aún no he encontrado uno que funcione. A diferencia de muchas API RESTful, mi API no necesita inicios de sesión de usuario, tokens que expiren u otros métodos de autenticación complejos (aunque muy seguros), lo que hace que la mayoría de los tutoriales sean inutilizables.

El único requisito que tengo es que una solicitud POST para registrar un registro en mi base de datos en una ruta debe estar protegida, mientras que una solicitud GET para acceder a los registros en esa misma ruta debe estar desprotegida. Los clientes que están registrando registros son de confianza y yo proporcionaría sus credenciales de forma privada.

He intentado usar este método de autenticación básica aquí:

var basicAuth = require('basic-auth');

var auth = function (req, res, next) {
  function unauthorized(res) {
    res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
    return res.send(401);
  };

  var user = basicAuth(req);

  if (!user || !user.name || !user.pass) {
    return unauthorized(res);
  };

  if (user.name === 'foo' && user.pass === 'bar') {
    return next();
  } else {
    return unauthorized(res);
  };
};

Pero las solicitudes POST todavía funcionaron cuando usé el nombre de usuario y la contraseña incorrectos.

Realmente ya no sé qué buscar, ya que pensé que la autenticación básica así funcionaría.

EDITAR: Logré que esto funcionara después de cambiar un par de cosas después de app.post, que había pasado por alto.

    
pregunta Andy Morgan 17.07.2016 - 01:46
fuente

1 respuesta

1

Si no está registrando el GET RESTful que consulta los datos en su base de datos y que los datos están destinados a ser públicos, entonces puede exponer un GET HTTP y usar la seguridad integrada en el servidor web para evitar que ocurran daños durante ese período. operación.

Para el POST REST, use TLS, el contemporáneo de SSL, pero no lo implemente usted mismo. Puede configurar un POSTE HTTPS en cualquier servidor web moderno con facilidad. El soporte de la mesa de ayuda para instalar el certificado del lado del servidor generalmente es compatible con la CA. Debido a que personas de todo el mundo implementan HTTPS POST cada día, el soporte para esa operación hace que sea más fácil de configurar y mantener que hacer algo simple que sea realmente seguro.

Lo que usted codificó no es seguro, lo que no cree que sea importante.

Para ejercer la diligencia debida al responder a su pregunta, tenga en cuenta que otorgar credenciales a las personas por teléfono o en un papel no es seguro sin emplear un protocolo seguro como el HTTPS. Confiar en probar el valor de una credencial en el servidor deja un agujero de seguridad enorme que puede llevar a consecuencias que puede haber pasado por alto.

Los atacantes pueden identificar fácilmente la contraseña en la ruta y luego causar estragos en la cuenta y los datos de su cliente / cliente / visitante. Incluso si los datos no son críticos para el negocio, las escrituras no protegidas podrían terminar mal. Alguien podría, por varias razones, colocar pornografía infantil o algún secreto militar en su base de datos, que tiene la intención de dejar abierta al público. No podría probar que usted o uno de los usuarios de confianza no lo pusieron allí.

    
respondido por el FauChristian 26.01.2017 - 02:50
fuente

Lea otras preguntas en las etiquetas