framework - Autenticación ASP.NET Identity+Windows(modo Mix-Forms+Windows)
identity framework c# (6)
¿Desea manejar formularios y autenticación AD desde una URL? He utilizado thinktecture (autenticación basada en notificaciones) como el marco para WIF y para reunir varias formas de autenticación. Sin embargo, para manejar si desde una URL tenía que manejar alguna lógica en el inicio de sesión que asociaba al usuario con AD o Formularios. En un proyecto más reciente, esto se manejó en la administración de usuarios cuando creamos la cuenta de usuario (estaba asociada a AD of Forms Auth). Luego, cuando el usuario inicia sesión, precederán el nombre de dominio AD como parte del inicio de sesión. Hay varias maneras de implementar esto, este fue solo uno que he usado. Un ejemplo, en lugar de requerir el dominio, simplemente use el nombre de usuario, luego verifique los indicadores AD o formularios basados en el nombre de usuario y luego maneje la autenticación en consecuencia
EDITAR Solo una actualización para volver a leer su pregunta. ¿Los usuarios de internet y los usuarios de intranet son los mismos? Si es así, solo tiene que ir a través de la autenticación basada en formularios y administrar a los usuarios en la base de datos del producto independientemente de AD. Si son iguales, podrían iniciarse introduciendo el nombre de dominio en el nombre de usuario. si quisiera confiar únicamente en AD.
Hice todo lo posible para buscar en la web antes de hacer esta pregunta. He visto preguntas similares en stackoverflow, sin embargo, ninguna se ha respondido satisfactoriamente desde hace mucho tiempo. Este es un intento más para que se responda esta pregunta recurrente.
El problema
¿Cómo construir un sitio web ASP.NET MVC 5 que usa "Windows Auth" para usuarios de Intranet y "Forms Auth" para usuarios de Internet? Nos gustaría lograr esto utilizando ASP.NET Identity. Además, no queremos usar grupos de Active Directory para la autorización. Para los usuarios de Intranet, queremos autenticarlos utilizando Active Directory y luego recurrir a ASP.NET Identity para administrar sus roles y otros datos de perfil.
Sería bueno si no solicitamos al usuario final que elija el método auth. La aplicación web debe iniciar sesión en los usuarios de la intranet sin problemas. Ni siquiera deberían saber que hay una pantalla de inicio de sesión. Del mismo modo, los usuarios de Internet no deberían tener que ingresar sus credenciales de dominio. Deben ver la pantalla de inicio de sesión basada en el formulario de inmediato.
¿Hay alguna forma recomendada de resolver esto? ¿O podría comentar si alguna de las siguientes soluciones son las adecuadas?
http://world.episerver.com/blogs/Dan-Matthews/Dates/2014/8/Mixing-Forms-and-Windows-Authentication/
https://github.com/MohammadYounes/MVC5-MixedAuth
Para su información Este es un artículo de 2004, puede no ser útil ahora: https://msdn.microsoft.com/en-us/library/ms972958.aspx
¿Por qué no poner el código de su sitio web en el servidor, robocopiarlo en dos sitios web separados y simplemente manejar los cambios en la autenticación mediante la configuración de la web.config. (uno sería configurado con anónimo y uno con autenticación de Windows).
No es tan elegante como otros métodos, pero es relativamente sencillo. Hay dos sitios, pero el contenido (a excepción de web.config) es idéntico.
El término para esto es Autenticación en modo mixto. Lo he hecho varias veces. Solo necesita modificar su sitio principal. Así es como lo he hecho.
Mantenga su sitio MVC principal tal como está, pero ejecútelo como Anonymous vs. Authentication de Windows.
Sitio interno
Crear un sitio de URL de redireccionamiento: configure este sitio como autenticación de ventana para que pueda extraer la identificación de usuario de Active Directory. Déle a sus usuarios esta URL y haga que sea el enlace en el que hacen clic en su Intranet. Entonces este sitio llama a su sitio MVC y le pasa las credenciales de usuario (id de inicio de sesión).
a. Esto se puede hacer a través de una cadena cifrada en la URL o el valor cifrado en una cookie. También puede cifrar con un valor de fecha / hora de caducidad.
segundo. (Hablando desde Aut. De formularios) Crea un Ticket de autenticación de formularios con ese ID de usuario. Ejecute cualquier otra lógica de inicio de sesión que tenga. Hecho.
Sitio externo: no se requieren cambios. Permita que los usuarios inicien sesión tal como están.
Hice una prueba de concepto de esto hace algún tiempo, en mi trabajo anterior, por lo que los detalles son borrosos y no tengo ningún código para referirme a ...
Los requisitos fueron:
- URL única para acceso interno (LAN) y externo (internet)
- Dos tipos de usuarios, personas en el dominio y usuarios externos (no AD)
- Autenticación de Windows para usuarios de dominio tanto interna como externamente
- La capacidad de ingresar detalles de inicio de sesión de dominio al usar iPads (sin autenticación de Windows)
La idea central en la solución que surgió fue que utilizamos la Política de grupo de Active Directory para agregar una cadena personalizada al agente de usuario del encabezado de solicitud http, el contenido no importa, de hecho, utilizamos una larga cadena aleatoria de caracteres.
https://technet.microsoft.com/en-us/library/cc770379.aspx
A continuación, la página de inicio del sitio comprueba esto y, si se encuentran redireccionamientos a un directorio virtual, con autenticación de Windows, que verifica su cuenta de AD, rellena el token de autenticación de ASP.NET y luego los redirecciona a su página de inicio.
Si el encabezado personalizado no está allí, simplemente muestra el formulario de inicio de sesión normal.
La única otra cosa era agregar una verificación de correo electrónico / contraseña de AD al formulario de inicio de sesión normal para que, si un usuario de dominio accedía al sitio desde un dispositivo que no es Windows (iPad), entonces pudieran usar sus datos de inicio de sesión normales.
Una de las formas posibles podría ser crear dos sitios en IIS, pero tener la misma carpeta de destino, donde se encuentran las fuentes del sitio. El primer sitio es para usuarios internos con el modo de Autenticación de Windows habilitado y vinculante para 80 puertos, mientras que el segundo sitio es para usuarios externos con el modo Anónimo habilitado y vinculante al puerto 8080, por ejemplo. Luego, en el firewall, deberá configurar NAT, que todas las solicitudes provenientes de la red local o VPN se redirigirán al servidor IIS local en el puerto 80 y todas las solicitudes provenientes de Internet serán redireccionadas al puerto 8080 del servidor IIS.
Configuración de IIS
Habilite el estado de Autenticación anónima en IIS para todo el sitio y la Autenticación de Windows para alguna carpeta en el directorio raíz (por ejemplo, / WindowsLogin). En esta carpeta, coloque el archivo aspx (para el proyecto WebForms) o cree ApiController (para el proyecto MVC).
Configuración del sitio
En la página de inicio de sesión, agregue el botón "Iniciar sesión con cuenta de Windows / ActiveDirectory" (de la misma manera que es una práctica común agregar botones Iniciar sesión con Twitter, Facebook, Gmail, etc.). Cuando el usuario presiona este botón, será redirigido a la página o controlador en la carpeta / WindowsLogin, que requiere autenticación de Windows. Si el sitio usa alguna funcionalidad de inicio de sesión único, ubíquela en esa página o controlador, en otro caso simplemente guarde la sesión para usuarios de Windows allí. Si el usuario accedió a esa página o controlador, ya se habían autenticado como usuarios de Windows.