Estoy en el proceso de configurar la infraestructura para microservicios utilizando RabbitMQ como nuestro intermediario de mensajes para nuestra empresa. Estoy tratando de descubrir la mejor manera de manejar la seguridad del sistema. Este sistema solo se utilizará (por ahora) en nuestra red interna. Utilizamos Active Directory para mantener a los usuarios en el dominio.
He configurado RabbitMQ para usar LDAP sobre TLS para autenticar usuarios usando nuestros servidores de Active Directory. En algún momento tendré que enviar las credenciales de un usuario a RabbitMQ. Planeo usar .NET NetworkCredential para almacenar las credenciales. RabbitMQ no puede usar el token de WindowsIdentity, por lo que tendremos que enviar credenciales reales (nombre de usuario y contraseña en lugar de un token) al servidor RabbitMQ.
Primero, entiendo que NetworkCredential no es a prueba de balas, pero es mejor que nada.
Algunos compañeros de trabajo han expresado su preocupación de que almacenaremos las credenciales personales de los usuarios en la memoria de las aplicaciones. Cuando no se utiliza RabbitMQ, no era necesario almacenar explícitamente las credenciales a largo plazo. Simplemente podríamos autenticar al usuario y seguir adelante, (permitiendo que el recolector de basura finalmente limpie la contraseña ingresada por los usuarios).
Argumentan que preferirían tener una identidad de usuario avanzado que tenga los permisos necesarios para conectarse a RabbitMQ. Entonces no estaríamos almacenando credenciales personales y, en cambio, utilizaríamos la seguridad transitiva a través de la identidad del "Usuario de la aplicación".
Mi pregunta es ¿cuál es la práctica estándar para esta situación? Mi pensamiento es que almacenar una identidad de usuario avanzado en una aplicación es problemático. Si las credenciales de usuario avanzado, que necesariamente se distribuirán a cada usuario de alguna manera (incluso si están ocultas en el código), se comprometieron, las consecuencias serían peores que si las credenciales de un usuario individual estuvieran comprometidas.
En lo que respecta al control de permisos en el sistema, me parece que usar las credenciales reales de una persona es preferible a una identidad de usuario avanzado. No tengo forma de excluir a las personas si una persona tiene acceso a las credenciales de usuario avanzado.
¿Me falta alguna herramienta o recurso que maneje esta situación?