Estoy escribiendo una línea de software empresarial para una empresa, y queremos autenticar a los usuarios, para que podamos administrar el flujo de trabajo y realizar algunas auditorías. Básicamente, mis empleadores no quieren que yo use la autenticación de Windows debido a ciertas restricciones de red (en realidad no quiero entrar en ella, pero es una mezcla de configuración de red deficiente y jefes que desean saber si hay otra forma de hacerlo)
Estoy usando c #, wpf, MVVM, PRISM
He leído un poco acerca de las contraseñas de hashing, salting, etc. y cuanto más leo, más me doy cuenta de que realmente no debería escribir la sección de seguridad de este programa, ya que básicamente soy faaaaaaar de calificado.
Quiero saber, ¿cuáles son las alternativas?
-
Viendo que no debo escribirlo yo mismo, me gustaría saber ¿De dónde debo obtenerlo?
-
¿Contrato a expertos en seguridad para escribirlo?
-
¿Hay un programa de seguridad de terceros con el que debería interactuar?
-
¿Externalizo el diseño pero lo implemento yo mismo?
-
¿Quién es el gran jugador en esta industria que debería ver?
EDITAR
En respuesta a las preguntas planteadas por Steve:
¿Dónde están los datos?
- Bueno, esto aún no se ha decidido. Pensé que podría haber algún sistema que pueda alojar los datos de autorización (y las llamadas hacia y desde él) de forma segura y me preguntaba qué podría ser ese sistema. Sin embargo, tenemos un servidor SQL que imagino que probablemente será donde se guardarán los datos. Por lo tanto, los datos se almacenan en un servidor Microsoft SQL y los clientes en la red podrían acceder a ellos (para que los clientes se autentiquen). Es posible que escriba un servicio de autenticación que se ejecute en este servidor y acceda a los datos directamente a través de SQL (por lo que no está en la red). Los clientes luego se conectarán con este servicio.
¿Cómo está accediendo a los datos?
- Bueno, como dije, es un servidor SQL. El sistema es puramente interno (diseñaremos una interfaz web para los clientes en una etapa posterior, pero probablemente usará alguna otra autenticación basada en la web que, por lo que sé, será mucho más fácil porque estas cosas están integradas en la mayoría de las tecnologías de desarrollo web ). Hay una línea de Diginet que tiene una VPN a una segunda oficina que probablemente también querrá tener acceso.
¿Dónde quiero almacenar usuarios?
-
Estamos bastante bien con cualquier lugar, con 3 restricciones
-
No puede costar demasiado, por lo que probablemente deberíamos usar tecnologías que ya tenemos (uno de nuestros servidores, SQL o algo así)
-
La administración quiere seguridad. Tanto como sea posible en nuestro pequeño presupuesto.
-
La administración está un poco preocupada por el hecho de alojar externamente esos datos confidenciales, por lo que prácticamente tenemos que poseer y controlar donde sea que estén almacenados.
-
¿Cómo desea administrar usuarios?
- Para ser honesto, no estoy seguro de lo que esta pregunta realmente está preguntando. Sin embargo, creo que es importante para mí mencionar aquí que estamos escribiendo una aplicación personalizada para el negocio . Esta aplicación necesita para poder interactuar aparentemente sin problemas con esta solución, por lo que el usuario inicia sesión a través de nuestro sistema (que probablemente utiliza una API ofrecida por esta solución para hacer llamadas directamente al sistema), y esto la autenticación del sistema controla el acceso que tiene el usuario a nuestra aplicación personalizada.
Cuanto más hablo de eso, más creo que es una tarea difícil obtener alguna solución preempaquetada aquí, pero sigo volviendo a lo que Eric Lippert dijo:
"Permítame darle toda mi precaución estándar acerca de implementar sus propios algoritmos criptográficos y sistemas de seguridad: don't."
No estoy calificado para escribir esto correctamente. no será seguro. Entonces, ¿qué es lo que la gente realmente hace cuando desarrolla su propio software?