una sección puede porque por net leer formularios falta declaración configuración autenticacion asp asp.net iis-7 forms-authentication windows-authentication

asp.net - sección - Mezcla de autenticación de formularios con autenticación de Windows



la sección de configuración authentication no se puede leer porque falta una declaración de sección (7)

En realidad, puedes hacerlo. Un poco tarde para @dr_draik, pero esto surgió en un resultado de google para mí, así que pensé en compartir algunos conocimientos.

Si estás en el modo clásico: habilita tanto la autenticación de Windows como la de formularios. Recibirá una advertencia acerca de no poder hacer ambas cosas a la vez, pero puede ignorarla . Entonces, puede spelunk alrededor de varias propiedades como Código:

HttpContext.Current.Request.ServerVariables["LOGON_USER"]

y pesque el nombre de usuario de allí.

Si está en modo integrado: 4021905 IIS7 basado en desafío y la autenticación basada en redireccionamiento de inicio de sesión no se puede utilizar simultáneamente conduce a IIS 7.0 Autenticación de dos niveles con autenticación de formularios y autenticación de Windows que es un módulo que le permite cambiar selectivamente la autenticación para diferentes páginas

Tengo una aplicación de intranet (ASP.NET 3.5) que ha sido diseñada para usar autenticación de formularios (junto con el sistema de membresía aspnet predeterminado). También guardo información adicional sobre usuarios en otra tabla que comparte su clave principal con la tabla aspnet_users.

Para los usuarios que forman parte de nuestro dominio, guardo el nombre de su cuenta de dominio en la tabla de usuarios secundarios, y quiero iniciar sesión automáticamente en los usuarios cuyo nombre de cuenta de dominio coincida con un nombre almacenado en la tabla.

He leído las guías disponibles, todas de hace dos años o más y supongo que puede activar la Autenticación de Windows en una página de inicio de sesión separada que le permite extraer el nombre de la cuenta de dominio. De lo que puedo decir, sin embargo, esto no es posible en IIS7 (el método de autenticación general se aplica en todas las páginas y no se puede desactivar de forma selectiva, y ambos métodos de autenticación no se pueden aplicar en la misma página).

¿Hay alguna manera de hacer que IIS pase a través del nombre de la cuenta de dominio de Windows del usuario solicitante? No necesito la autenticación adecuada de AD, solo el nombre de dominio.


Encontré una solución sin complementos especiales. Fue complicado e involucró juntar elementos de todas las páginas a las que se hace referencia aquí. Publiqué sobre esto: http://low-bandwidth.blogspot.com.au/2014/11/iis7-mixed-windows-and-forms.html

En esencia, formularios, ventanas y autenticación anon tienen que estar habilitados. La pantalla de inicio de sesión debe estar basada en formularios y contener un botón para activar el inicio de sesión de Windows, que emite un desafío de respuesta HTTP 401 que, si tiene éxito, crea un ticket de inicio de sesión basado en formularios.

Los problemas son bastante complejos y la publicación describe los principios y la solución en detalle.


Hay muchos artículos sobre cómo mezclar la autenticación configurando config para usar los formularios y permitir el acceso anónimo a la aplicación. En segundo lugar, se debe crear una página para la autenticación integrada con las configuraciones de IIS configuradas para denegar el anonimato y usar la Autenticación integrada. Allí haría el truco de magia al verificar la variable "Logon_User" de la colección ServerVariables de los requets. Y finalmente, para la autenticación integrada para iniciar sesión silenciosamente en el usuario, debe tener un nombre corto alojado. Entonces, si su pieza de autenticación de formularios está expuesta a Internet a través de FQDN, debería haber algún tipo de redirección a la página de host corta. Creo que es posible lograrlo con solo una aplicación en IIS con 2 directorios virtuales.


Lamentablemente, lo que intentas hacer no es compatible. Para que ASP.NET sepa el nombre de usuario de Windows, debe usar la Autenticación de Windows.

Puede configurar otro sitio / directorio virtual que simplemente reenvió la información de nombre de usuario a otra página. ¿Pero qué ocurre cuando los usuarios autenticados que no son de Windows intentan iniciar sesión?


Siempre puedes configurar 2 aplicaciones por separado en IIS7. Uno tendría habilitada la Autenticación de Windows. La otra sería la aplicación principal con autenticación de formularios. Si un usuario fue a la aplicación de autenticación de Windows, la página podría tomar sus credenciales y pasarla a la aplicación de autenticación de formularios.


Tengo algo que puedes probar, no estoy seguro si funcionará.

En el pasado, hemos utilizado Request.ServerVariables["LOGON_USER"] pero, obviamente, para que esto devuelva un valor no vacío, debe deshabilitar el acceso anónimo.

Consulte este artículo: http://support.microsoft.com/default.aspx/kb/306359

Sugiere mantener el acceso anónimo en el lado de IIS y la autenticación de formularios, pero denegar al usuario anónimo de la siguiente manera:

<authorization> <deny users = "?" /> <!-- This denies access to the Anonymous user --> <allow users ="*" /> <!-- This allows access to all users --> </authorization>


(Más para completar la información realmente)

Le pregunté a un miembro de seguridad de .Net esta pregunta en una conferencia hace un tiempo. Su respuesta fue que es técnicamente posible, pero nunca lo había visto hecho (¡y dejarlo saber si lo hice y funcionó!).

Sugirió que la forma en que se podía hacer era crear su propio filtro ISAPI e instalarlo en IIS. El filtro ISAPI interceptaría las solicitudes y básicamente haría el trabajo que IIS hace cuando utiliza la autenticación integrada, pero recurre al uso de formularios si no estaba presente. Esto implicó una lógica complicada de desafío / respuesta en el filtro. Esto fue para IIS6, por lo que podría ser diferente en IIS7.

Aunque esto podría ser técnicamente posible, no recomendaría esta ruta, ya que se siente como un truco, y renovar tu propia seguridad nunca es una buena idea (a menos que realmente sepas lo que estás haciendo).