¿Cómo se debe administrar la autenticación en una línea personalizada de software empresarial?

2

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.

Eric Lippert tiene una muy buena introducción básica a la seguridad, en la que advierte al lector al principio que no debe diseñar su propio sistema de seguridad ya que no sabe lo suficiente.

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?

    
pregunta ExitMusic 23.05.2012 - 08:12
fuente

3 respuestas

2

Como dijo Graham, realmente depende de aquello contra lo que quieras protegerte. Pero dada la tecnología que mencionó, el gran impulso (de marketing) de Microsoft es usar la autenticación / autorización basada en reclamaciones a través de la federación: enlace .

Sin embargo, como solo eso probablemente no te ayude en absoluto, es posible que tengas que hacer algunas preguntas más:

  • ¿Dónde están los datos?
  • ¿Cómo estás accediendo a los datos? (Por ejemplo, directamente a través de conexiones SQL / ORM, oa través de un servicio web)
  • ¿Dónde desea almacenar usuarios?
  • ¿Cómo desea administrar usuarios?

Desde una perspectiva tecnológica, hay muchas opciones que no implican escribir cosas desde cero, incluidos productos de terceros para integrarse. Sin embargo, los productos de terceros generalmente existen para conjuntos de características muy específicos, por ejemplo, autenticación multifactorial.

EDITAR:

  

Entonces, ¿qué es lo que la gente realmente hace cuando desarrolla su propio software?

Continúan escribiendo su propio código de seguridad a pesar de que es inseguro.

Pensando a largo plazo, probablemente sea mejor crear un servicio WCF protegido por WIF y almacenar las credenciales en la base de datos utilizando proveedores de membresía ASP.NET. Hay un proyecto de código abierto que le proporcionará lo que necesita: enlace

Todas las llamadas al servicio WCF requerirán autenticación, por lo que el servicio sería la interfaz común para varios tipos de aplicaciones que acceden a los datos. Requiere un poco más de trabajo, pero le ahorrará a largo plazo.

    
respondido por el Steve 23.05.2012 - 20:22
fuente
1

Dado que usted es una tienda de Microsoft, y como parece que se sentiría cómodo con la implementación de esto si pudiera deshacerse del dominio existente, ¿ha considerado traer su propio dominio de AD por separado? Es de suponer que ya tienes administradores de Windows que pueden cuidarlo.

Otras soluciones podrían ser una mejor opción, por supuesto, pero esto tiene una cierta atracción rápida y sucia.

    
respondido por el Graham Hill 24.05.2012 - 12:03
fuente
0

Habrá otras respuestas más útiles desde el punto de vista técnico, así que guarde sus votos positivos para ellos, pero si me lo indica:

¿Cuáles son sus requisitos de seguridad reales? ¿Cuál es la amenaza? ¿Qué tan fuerte necesitas para autenticarte? ¿Incluso necesitas autenticarte?

Por ejemplo, realmente tengo una aplicación empresarial implementada donde los usuarios necesitan ser identificados, pero no autenticados. es decir, cuando Bob usa esta aplicación, la aplicación necesita que se identifique a sí mismo como Bob, para que pueda mostrar los datos de Bob, y así tenemos una pista de auditoría de lo que hizo Bob, pero no lo necesita para demostrar que es Bob.

Claro, Eve podría venir y decirle a la aplicación que ella era Bob, pero no ganaría nada. Supongo que Eve podría destrozar los datos por despecho, pero a la aplicación solo se puede acceder desde dentro de la red, y es muy aburrida, y tenemos copias de seguridad, y en ese caso, podemos recrear manualmente los datos de los días sin muchos problemas.

    
respondido por el Graham Hill 23.05.2012 - 11:46
fuente

Lea otras preguntas en las etiquetas