9

Nos estamos preparando para comenzar a migrar algunos de nuestros sitios IIS6 a IIS7, y la aplicación actualmente usa Autenticación de formularios. Hemos comenzado a recibir solicitudes de varios sitios para usar la Autenticación de Windows para los usuarios. Si bien esto es bastante fácil de implementar (y he demostrado internamente que no hay ningún problema con la aplicación, como se esperaba), la pregunta es cómo continuar manteniendo la autenticación de formularios para cuando Windows integrado no funcione. He visto varios tutoriales sobre cómo configurarlo en IIS6, y podría hacer lo mismo en IIS7, pero luego tengo que activar el procesamiento de modo clásico. Cualquier solución también debería volverse portable a IIS6, si es posible, para mantener el árbol de compilación simple.IIS7 Autenticación de modo mixto

¿Cuáles son mis opciones en esto? ¿Configuro la aplicación con Autenticación de Windows integrada en IIS7, Autenticación de formularios en el archivo web.config y redirijo los errores 401 a una "página de error" que les permite iniciar sesión utilizando formularios y luego volver a la aplicación normal?

El caso en que es probable que los formularios se necesiten se reservará para los trabajadores subcontratados, nuestro personal de soporte y si alguien necesita acceder a él en su sitio desde su Extranet. Entonces, principalmente es para que nuestro personal inicie sesión para verificar la funcionalidad y confirmar los informes de errores. Sugerí que simplemente mantuviéramos que para que nuestro personal de soporte trabaje, necesitamos un inicio de sesión de Windows que siempre estará activo, y luego simplemente aplicaremos la responsabilidad local sobre quién puede iniciar sesión en el sitio, pero me dicen que haríamos es mejor tener Autenticación de formularios.

¿Alguna idea? Puedo publicar algunos de los enlaces de los artículos que ya leí si eso ayudaría al foro a reducir mis necesidades.

tl; dr: Cómo hacer la autenticación de modo mixto (formularios, ventanas) en IIS7 sin cambiar a la canalización clásica y todavía ser capaz de usar la compilación en IIS6 si es posible.

+0

¿Sería mejor (a-la http://stackoverflow.com/questions/2432845/asp-net-mvc-and-mixed-mode-authentication) tener dos "proyectos" separados bajo mi compilación principal que son estrictamente para emitir cookies específicas de la máquina por Web.config MachineKey y así mantener los mecanismos de autenticación separados del uso de la aplicación y conservar los formularios en la aplicación principal. Esa podría ser la ruta más fácil de tomar. – jcolebrand

+0

Presumiblemente tengo que hacer algo como esto: http://www.15seconds.com/Issue/050203.htm pero eso parece tan bárbaro cuando todo podría residir en una pila. – jcolebrand

+0

Además, para cualquier persona que lea esto después de haber publicado la pregunta original y algunas respuestas: Si el usuario navega al sitio y NO ingresa sus credenciales a la respuesta 401, recibe una patada a una página de error 401 predeterminada de ASP.NET. No he descubierto cómo redirigirlos en ese momento a la página predeterminada de mis formularios (¿pero quizás dejé de buscar demasiado pronto?) – jcolebrand

Respuesta

7

No, eso es no del todo bien, pero no puedo hacer un bloque de código en una respuesta de comentario, así que publicaré una nueva respuesta ...

El siguiente bloque de código me permite controlar el acceso anónimo de IIS7 sin tener que ensuciar en la metabase (donde se aplican los cambios de GUI en IIS6)

<location path="WindowsLogin.aspx" > 
    <system.web> 
     <authorization> 
      <deny users="?" /> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
    <system.webServer> 
     <security> 
      <authentication> 
       <anonymousAuthentication enabled="false" /> 
       <windowsAuthentication enabled="true" /> 
      </authentication> 
     </security> 
    </system.webServer> 
</location> 
+2

No es que esté tratando de dar a entender que IIS7 tiene una metabase ... – jcolebrand

2

gracias por volverme, he estado jugando con varias de las implementaciones de forma intermitente durante algunas semanas, que he leído en Internet (javascript, 401, 2 directorios virtuales) pero aún así Realmente no he encontrado nada que funcione como yo quería. Potencialmente podremos extenderlo a más de un cliente, cada uno con hardware/configuraciones diferentes, incluso versiones diferentes de iis, por lo que queríamos que fuera lo más genérico posible. He tropezado con una pared de ladrillos en un par de las soluciones sugeridas ...

cuando se dice para IIS7 + ha quitado el acceso anon en web.config, que asumen la siguiente manera: -

<location path="Authent/WinLogin.aspx" > 
    <system.webServer> 
    <security> 
     <authorization> 
     <add accessType="Deny" users="?" /> 
     </authorization> 
    </security> 
    </system.webServer> 
</location> 
+0

No, eso no está del todo bien, pero no puedo hacer un bloque de código en una respuesta de comentario, así que publicaré una nueva respuesta ... – jcolebrand

1

Pasé unos días tratando de hacer que esto funcione, con una pequeña diferencia ... Quería que la primera pantalla de inicio de sesión presente los formularios de inicio de sesión con un botón debajo de "Iniciar sesión con autenticación de Windows".

Finalmente abandoné todas estas técnicas, ya que nunca pude obtener los resultados satisfactorios.Mi solución fue la siguiente, y funciona perfectamente:

  • crear un sitio web "LoginWithIntegratedSecurity" separada
  • instalar esto con seguridad integrada
  • Este sitio web crea una "clave hash de usuario" temporal en la base de datos, que identifica al usuario
  • redirige a LogonPage en Formas sitio web de autenticación con la clave Hash en url
  • LogonPage en comprobaciones de autenticación Formas para la clave Hash, y registros de usuario en la base de datos después de la salida

De modo que si el usuario hace clic en el botón "Iniciar sesión con autenticación de Windows", el servidor redirecciona al sitio de autenticación de Windows (pasando el "ReturnUrl"). Este sitio desafía e inicia sesión en el usuario, luego redirecciona de nuevo, pasando de nuevo el "ReturnUrl" y la HashKey.

Todo esto sucede muy rápido y parece bastante perfecto.

Sé que es una solución hacky, pero para mi caso funcionó bien.

+0

guau, esa es una gran solución. Tengo dos archivos en mi directorio, con diferentes niveles de autenticación. – jcolebrand

+0

Sí, supongo que sí. Pero este inicio de sesión con la clave Hash es útil para muchos otros elementos, como la sincronización de inicios de sesión y enlaces desde otros sistemas. Tampoco quería que los usuarios externos (ninguno integrado) se enfrentaran a un mensaje de credenciales integrado. –

+0

Entonces, ¿cómo se evita que vean eso? – jcolebrand

Cuestiones relacionadas