tag - Configurar ASP.NET MVC para autenticación contra AD




tag helpers asp net core 2 (2)

Autenticación de formularios

Puede usar la autenticación de formularios normales para autenticar a un usuario en un Active Directory, para eso solo necesita su cadena de conexión AD:

<connectionStrings>
  <add name="ADConn" connectionString="LDAP://YourConnection" />
</connectionStrings>

y agregue el proveedor de membresía para usar esta conexión:

<membership defaultProvider="ADMembership">
  <providers>
    <add name="ADMembership"
         type="System.Web.Security.ActiveDirectoryMembershipProvider,
               System.Web,
               Version=2.0.0.0, 
               Culture=neutral,
               PublicToken=b03f5f7f11d50a3a"
         connectionStringName="ADConn"
         connectionUsername="domain/user"
         connectionPassword="pwd" />
  </providers>
</membership>

deberá usar el nombre de usuario @ dominio para autenticar correctamente al usuario.

Aquí hay algo para que comiences

Autenticación de Windows

Si comienza su nuevo proyecto, siempre puede seleccionar la aplicación Intranet de la plantilla y todo está cuidado.

Si quieres hacerlo manualmente, necesitas cambiar:

  1. Habilitar la autenticación de Windows
  2. Deshabilitar la autenticación anónima

Para obtener información detallada sobre cómo hacer esto en IIS7 / 8 e IISExpress:

IIS 7 y IIS 8

  1. Abra el Administrador de IIS y navegue a su sitio web.
  2. En la vista Características, haga doble clic en Autenticación.
  3. En la página Autenticación, seleccione la autenticación de Windows. Si la autenticación de Windows no es una opción, deberá asegurarse de que la autenticación de Windows esté instalada en el servidor.

    Para habilitar la autenticación de Windows en Windows: a) En el Panel de control, abra "Programas y características". b) Seleccione "Activar o desactivar las características de Windows". c) Vaya a Internet Information Services> World Wide Web Services> Security y asegúrese de que el nodo de autenticación de Windows esté seleccionado.

    Para habilitar la autenticación de Windows en Windows Server: a) En el Administrador del servidor, seleccione Servidor web (IIS) y haga clic en Agregar servicios de función b) Vaya a Servidor web> Seguridad y asegúrese de que el nodo de autenticación de Windows esté marcado.

  4. En el panel Acciones, haga clic en Habilitar para usar la autenticación de Windows.

  5. En la página Autenticación, seleccione Autenticación anónima.
  6. En el panel Acciones, haga clic en Deshabilitar para deshabilitar la autenticación anónima.

IIS Express

  1. Haga clic derecho en el proyecto en Visual Studio y seleccione Usar IIS Express.
  2. Haga clic en su proyecto en el Explorador de soluciones para seleccionar el proyecto.
  3. Si el panel Propiedades no está abierto, ábralo (F4).
  4. En el panel Propiedades de su proyecto: a) Establezca "Autenticación anónima" en "Desactivado". b) Establezca "Autenticación de Windows" en "Habilitado".

En tu web.config tienes algo como

<system.web>
  <authentication mode="Windows" />

  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

¡y eso es!

Ahora, cuando quieras la identidad del usuario, solo llama

@User.Identity.Name

y esto te mostrará el nombre de Domain\Username para mí:

Aquí hay algo para que comiences

¿Cuáles son los pasos de alto nivel para autenticar a los usuarios de una aplicación MVC de ASP.NET en Active Directory?

Presumo algo como:

  1. Modificar web.config para usar la autenticación de Windows
  2. Configure web.config para utilizar ActiveDirectoryMembershipProvider
  3. Configure el web.config para usar un RoleProvider personalizado que se ve en AD

¿Lo anterior parece sensato y, de ser así, dónde pongo la lógica de detección de usuario válida?

En mi caso, un usuario válido es alguien en un dominio de AD específico.


Aquí hay una solución del tutorial Chris Schiffhauer - Implementar la autenticación de Active Directory en ASP.NET MVC 5 :

Puede proteger su aplicación web MVC en una red de Active Directory al autenticar a los usuarios directamente contra sus credenciales de dominio.

PASO 1: ACCOUNTCONTROLLER.CS

Reemplace su archivo AccountController.cs con lo siguiente:

using System.Web.Mvc;
using System.Web.Security;
using MvcApplication.Models;

public class AccountController : Controller
{
    public ActionResult Login()
    {
        return this.View();
    }

    [HttpPost]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (!this.ModelState.IsValid)
        {
            return this.View(model);
        }

        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (this.Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return this.Redirect(returnUrl);
            }

            return this.RedirectToAction("Index", "Home");
        }

        this.ModelState.AddModelError(string.Empty, "The user name or password provided is incorrect.");

        return this.View(model);
    }

    public ActionResult LogOff()
    {
        FormsAuthentication.SignOut();

        return this.RedirectToAction("Index", "Home");
    }
}

PASO 2: ACCOUNTVIEWMODELS.CS

Actualice su AccountViewModels.cs (o como se AccountViewModels.cs su clase de modelo de cuenta) para que contenga solo esta clase LoginModel:

using System.ComponentModel.DataAnnotations;

public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

PASO 3: WEB.CONFIG

Finalmente, actualice su archivo Web.config para incluir estos elementos.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
      <authentication mode="Forms">
          <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All" />
      </authentication>
      <membership defaultProvider="ADMembershipProvider">
          <providers>
              <clear />
              <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
          </providers>
      </membership>
  </system.web>
  <connectionStrings>
      <add name="ADConnectionString" connectionString="LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local" />
  </connectionStrings>
</configuration>

Puede tomar algunos pasos para obtener su cadena de conexión LDAP:

  1. Instale las herramientas de administración remota del servidor para Windows 7. Asegúrese de seguir las instrucciones posteriores a la instalación para agregar la función a Windows a través del panel de control.

  2. Abra un símbolo del sistema y entre >dsquery server

    Digamos que el comando devuelve lo siguiente:

    CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local
    • El nombre del servidor se compone del primer valor de CN y los dos últimos valores de CC, separados por puntos. Así que es primary.mydomain.local .

    • El puerto es 389.

    • La parte de la cadena de conexión después del puerto y la barra inclinada es la parte del resultado que comienza con el primer "DC" . Así que es DC=MyDomain,DC=Local .

    • Así que la cadena de conexión completa es

      LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.
    • Los usuarios iniciarán sesión usando solo su nombre de usuario sin el dominio. Así que el nombre de usuario correcto es Chris, no MYDOMAIN \ Chris.





active-directory