Autenticación interna del servidor al servidor usando un solo token

0

Uno de nuestros mandatos de seguridad requiere autenticación entre servidores cuando se transmiten datos. Estos puntos finales de API solo son accesibles dentro de la red interna y nunca están expuestos.

Nuestra idea es utilizar un único esquema de autenticación de token. Tendremos un par de tokens entre los servidores internos y con cada solicitud, el servidor que llama enviará el token en el encabezado de la solicitud a través de HTTPS al servidor de destino. El servidor de destino autentificará el token para ver si coincide y, si lo hace, procesa la solicitud. Si no lo hace, registra el intento de conexión no válida.

Creemos que la implementación de OAUTH 2.0 o similar sería excesiva ya que es interna, controlamos ambos servidores, hay un pequeño grupo de personas con acceso y será a través de HTTPS.

¿Es esta una solución aceptable? El token se generará mediante una función aleatoria segura y se almacenará en cada servidor con el acceso bloqueado. El token no caducará ya que no está destinado a los usuarios, sino a los servidores.

    
pregunta Fybe 05.07.2018 - 11:43
fuente

2 respuestas

1

Lo que es aceptable para usted depende del valor de lo que esté protegiendo y de los riesgos inherentes a otros aspectos del sistema.

En muchos casos, su sugerencia puede ser perfectamente razonable, pero en otros puede ser inaceptable. El riesgo puede estar representado por las consecuencias de un incumplimiento, en ocasiones es probable.

Entonces, si estás manejando información muy sensible, pero hay una probabilidad muy baja de que alguien pueda obtener ese secreto compartido, porque tienes controles muy rigurosos sobre quién podría tener acceso a él ... puedes estar bien. Pero si sus controles sobre el sistema son bastante laxos, la probabilidad sería mayor y podría ser inaceptable. Puede abordar eso con un esquema de autenticación diferente, o reduciendo las posibilidades de que alguien obtenga ese token.

Algunas sugerencias adicionales para mitigar los riesgos relacionados con este tipo de autenticador:

  • Convierta el secreto compartido en una configuración, no en una cadena codificada.
  • No lo compruebe en el control de fuente
  • Facilite el cambio en caso de incumplimiento (posiblemente tenga un período de gracia en el que dos tokens son válidos para que pueda reinvertir sin interrupción)
  • Asegúrese de que el lugar donde se almacena el secreto tenga los permisos de archivo correctos localmente, o puede usar un servicio como Azure KeyVault Secrets para que la máquina solo lo tenga en la memoria
  • Use un esquema criptográfico como HMAC para firmar algunos detalles de los parámetros de solicitud, para que el secreto real nunca pase por la conexión. Las cuentas de almacenamiento de Azure y S3 funcionan de esta manera.
  • También en el campamento de criptografía, puedes usar TOTP, que combina un secreto compartido con un hash basado en el tiempo; cada token transmitido a través del cable sería válido por un tiempo muy corto, pero el secreto nunca cambiaría
  • Vincule el token con la dirección IP del servidor que tiene permiso para usarlo, limitando así su uso al servidor al que pertenece
respondido por el nbering 05.07.2018 - 15:43
fuente
0

Como ya está utilizando HTTPS, ya está recibiendo certificados de servidor TLS X.509. Yo sugeriría usar el certificado de cliente TLS para la autenticación del cliente. Este mecanismo de autenticación es compatible con la mayoría de los servidores web listos para usar.

Por supuesto que tienes que renovar los certificados de cliente. Pero ese es el mismo procedimiento como renovar certificados de servidor.

    
respondido por el Michael Ströder 17.07.2018 - 22:23
fuente

Lea otras preguntas en las etiquetas