Aplicación ASP.NET para autenticarse en Active Directory o SQL a través de la autenticación de Windows o la autenticación de formularios

StackOverflow https://stackoverflow.com/questions/306652

Pregunta

Estoy en el proceso de escribir una aplicación que necesitará múltiples formas de autenticación.

La aplicación deberá admitir la autenticación en Active Directory, pero podrá volver a un proveedor de membresía SQL si el usuario no está en Active Directory. Podemos manejar la falla del proveedor de SQL en el código basado en el nombre de usuario proporcionado porque el nombre de usuario tendrá un formato diferente al nombre de usuario de Active Directory.

¿Es esto posible? Lo que quiero decir es, ¿puedo usar la membresía y usar ActiveDirectoryMembershipProvider y SqlMembershipProvider juntos o tendré que rodar la mía?

Otra complejidad adicional adicional es que me gustaría autenticar automáticamente a mis usuarios internos basados ??en la autenticación de Windows en AD, pero usar la autenticación de formularios para usuarios que no están en nuestra red interna, o usuarios que están utilizando el proveedor de SQL.

Lo más probable es que sean servidores separados, uno interno y el otro externo, por lo que tengo mucho que planear para averiguar la replicación de datos y cómo autenticaré a los usuarios de AD si llegan al servidor externo, etc.

Me pregunto qué pensamientos hay al comenzar este camino. ¿Es posible lo que quiero hacer sin que yo lo haga, o hay una forma de combinarlos?


Gracias por la respuesta.

La razón por la que pregunté originalmente fue porque pude lograr que este servicio específico funcionara hace aproximadamente 7 años usando IIS para autenticar y luego pasar las credenciales a una aplicación web de servidor Lotus Domino. Si el usuario no fue autenticado a través de la autenticación de Windows / ISS, entonces Domino se encargaría de la autenticación. Esto era lo que estaba buscando hacer aquí, pero realmente no podía pensar en una manera de hacerlo funcionar en IIS.

En cuanto al resto de su respuesta, creo que está en el camino que tendré que tomar. He pensado en esto y lo he echado mucho en la cabeza. De todos modos, la aplicación será algo diferente en los dos servidores, ya que de todos modos habrá un acceso limitado a los datos en el servidor externo. El hecho de que ya va a ser diferente, puedo tratarlas como dos aplicaciones, negando así la necesidad de usar dos tipos de autenticación en la misma aplicación de todos modos.

Estoy jugando con la idea de escribir mi propia ventana de autenticación / inicio de sesión para el servidor externo, y si el usuario intenta iniciar sesión con sus credenciales de AD en el servidor externo, podré detectar eso y redirigirlo al servidor interno. Si no están en la red local o no tienen VPN, simplemente no tendrán acceso. Sin embargo, esta parte todavía tiene algún proceso de pensamiento, así que no estoy seguro.

Como un pensamiento adicional, ¿hay alguna manera de extraer la cantidad suficiente de AD en una base de datos SQL para permitirme autenticar a los usuarios en la base de datos SQL desde el servidor externo usando sus credenciales AD, sin crear ningún problema de seguridad? Espero estar escribiendo claramente lo que estoy pensando ...

¡Gracias de nuevo!

Tim

¿Fue útil?

Solución

Esta es la forma en que he manejado una situación similar basada en esta información :

  1. Configura la aplicación para usar la autenticación de formularios.
  2. Establezca LoginUrl en una página llamada WinLogin.aspx.
  3. En WinLogin.aspx, use Request.ServerVariables [" LOGON_USER "] para obtener el nombre de usuario y luego llame a FormsAuthentication.RedirectFromLoginPage (AuthorUserName, false) para iniciar sesión. Supongo que también puede verificar manualmente Active Directory como este punto. .
  4. Cree una página html que redirija a una página llamada Login.aspx
  5. Login.aspx es su nombre de usuario / contraseña estándar.
  6. En IIS, habilite la autenticación integrada y anónima en todo el sitio, pero niegue el acceso anónimo a WinLogin.aspx.
  7. En IIS, configure sus errores 401 en la página creada en el paso 3.

Lo que sucede básicamente es que cuando un usuario no autenticado llega al sitio, es redirigido a WinLogin.aspx. Dado que anónimo está desactivado, la seguridad integrada hace una verificación. Si eso pasa, su código personalizado en WinLogin puede ejecutarse. Si la comprobación de seguridad integrada falla, se produce un error 401. Su página 401 personalizada redirige a Login.aspx donde el usuario puede iniciar sesión con su nombre de usuario y contraseña con el proveedor de SQL.

Otros consejos

Hasta donde yo sé, las aplicaciones web están configuradas para usar la autenticación de Windows o la autenticación de formularios, pero no ambas. Por lo tanto, no creo que sea posible autenticar automáticamente a los usuarios internos mientras se requiere que otros ingresen un nombre de usuario / contraseña.

Puede autenticarse en Active Directory o en un almacén de usuarios de SQL mediante la autenticación de Formularios utilizando un proveedor personalizado. Sin embargo, los usuarios de AD aún necesitarían ingresar su nombre de usuario y contraseña. Aunque nunca he combinado estos dos métodos, he usado la autenticación de formularios para autenticar en ambas fuentes en un momento u otro.

Dicho esto, creo que es posible que desee considerar reducir la " flexibilidad " de tu sistema. Si tiene un servidor externo y uno interno, simplemente puede cambiar la configuración del proveedor en cada copia de la aplicación para ir a una fuente diferente. Luego, puede configurar el interno para usar la autenticación de Windows (automático) y el externo para usar la autenticación de formularios.

En mi humilde opinión, creo que los usuarios internos no deberían utilizar el servidor externo para acceder a la aplicación. Si lo están, deberían tener una cuenta de usuario almacenada en SQL, completamente separada de su cuenta de AD. Básicamente, cuando alguien accede a la aplicación externamente, está actuando como un usuario externo, independientemente de su ubicación física.

Bueno, es posible usar ActiveDirectoryMembershipProvider y SqlMembershipProvider, pero esto requiere que diseñe su página de inicio de sesión con su propio código en lugar de los controles de inicio de sesión.

Acerca de la autenticación mixta (Windows y Formularios), que yo sepa, solo IIS 7 lo hace fácil y limpio. Vea esta publicación para más detalles,

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top