web-dev-qa-db-fra.com

Configurer ASP.NET MVC pour l'authentification auprès d'AD

Quelles sont les étapes de haut niveau pour authentifier les utilisateurs d'une application ASP.NET MVC auprès d'Active Directory?

Je présume quelque chose comme:

  1. Modifier web.config pour utiliser l'authentification Windows
  2. Configurer web.config pour utiliser ActiveDirectoryMembershipProvider
  3. Configurez web.config pour utiliser un fournisseur de rôle personnalisé qui ressemble à AD

Ce qui précède a-t-il un sens, et si oui, où dois-je placer la logique de détection d'utilisateur valide?

Dans mon cas, un utilisateur valide est quelqu'un sur un domaine AD spécifique.

52
Ben

Authentification par formulaire

Vous pouvez utiliser l'authentification par formulaire normal pour authentifier un utilisateur auprès d'un annuaire Active Directory. Vous n'avez besoin que de votre chaîne de connexion AD:

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

et ajoutez le fournisseur d'adhésion pour utiliser cette connexion:

<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>

vous devrez utiliser nom_utilisateur @ domaine pour authentifier avec succès l'utilisateur.

Voici quelque chose pour vous aider à démarrer


Authentification Windows

Si vous démarrez votre nouveau projet, vous pouvez toujours sélectionner une application intranet à partir du modèle et tout est pris en charge pour vous.

enter image description here

Si vous voulez le faire manuellement, vous devez changer:

  1. Activer l'authentification Windows
  2. Désactiver l'authentification anonyme

pour obtenir des informations détaillées sur cette opération sous IIS7/8 et IISExpress:

IIS 7 & IIS 8

  1. Ouvrez le Gestionnaire IIS) et accédez à votre site Web.
  2. Dans la vue des fonctionnalités, double-cliquez sur Authentification.
  3. Sur la page Authentification, sélectionnez Authentification Windows. Si l'authentification Windows n'est pas une option, vous devez vous assurer que l'authentification Windows est installée sur le serveur.

    Pour activer l'authentification Windows sous Windows: a) Dans le Panneau de configuration, ouvrez "Programmes et fonctionnalités". b) Sélectionnez "Activer ou désactiver les fonctionnalités Windows". c) Accédez à Internet Information Services> Services World Wide Web> Sécurité et assurez-vous que le nœud d'authentification Windows est coché.

    Pour activer l'authentification Windows sur Windows Server: a) Dans le Gestionnaire de serveur, sélectionnez Web Server (IIS) et cliquez sur Ajouter des services de rôle b) Accédez à Serveur Web> Sécurité et assurez-vous que le nœud d’authentification Windows est coché.

  4. Dans le volet Actions, cliquez sur Activer pour utiliser l'authentification Windows.

  5. Sur la page Authentification, sélectionnez Authentification anonyme.
  6. Dans le volet Actions, cliquez sur Désactiver pour désactiver l'authentification anonyme.

IIS Express

  1. Cliquez avec le bouton droit sur le projet dans Visual Studio et sélectionnez Utiliser IIS Express.
  2. Cliquez sur votre projet dans l'explorateur de solutions pour sélectionner le projet.
  3. Si le volet Propriétés n'est pas ouvert, ouvrez-le (F4).
  4. Dans le volet Propriétés de votre projet: a) Définissez "Authentification anonyme" sur "Désactivé". b) Définissez "Authentification Windows" sur "Activé".

Dans votre web.config avoir quelque chose comme

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

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

et c'est tout!

Maintenant, quand vous voulez l'identité de l'utilisateur, appelez simplement

@User.Identity.Name

et cela vous montrera le Domain\Username Comme pour moi :

enter image description here

Voici quelque chose pour vous aider à démarrer

81
balexandre

Voici une solution du tutoriel Chris Schiffhauer - Implémentation de l'authentification Active Directory dans ASP.NET MVC 5 :

Vous pouvez sécuriser votre application Web MVC sur un réseau Active Directory en authentifiant directement les utilisateurs avec leurs informations d'identification de domaine.

ÉTAPE 1: ACCOUNTCONTROLLER.CS

Remplacez votre AccountController.cs fichier avec les éléments suivants:

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");
    }
}

ÉTAPE 2: ACCOUNTVIEWMODELS.CS

Mettez à jour votre AccountViewModels.cs (ou quelle que soit la classe de modèle de votre compte) ne contienne que cette classe 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; }
}

ÉTAPE 3: WEB.CONFIG

Enfin, mettez à jour votre Web.config fichier pour inclure ces éléments.

<?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>

Plusieurs étapes peuvent être nécessaires pour obtenir votre chaîne de connexion LDAP:

  1. Installez les outils d'administration de serveur distant pour Windows 7. Suivez les instructions de post-installation pour ajouter la fonctionnalité à Windows via le panneau de configuration.

  2. Ouvrez une invite de commande et entrez >dsquery server

    Disons que la commande retourne ce qui suit:

    CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local
    
    • Le nom du serveur est composé de la première valeur CN et des deux dernières DC valeurs, séparées par des points. Il s’agit donc de primary.mydomain.local.

    • Le port est 389.

    • La partie de la chaîne de connexion après le port et la barre oblique est la partie du résultat commençant par le premier "DC". Alors c'est DC=MyDomain,DC=Local.

    • Donc, la chaîne de connexion complète est

      LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.
      
    • Les utilisateurs se connecteront en utilisant uniquement leur nom d'utilisateur sans le domaine. Donc, le nom d'utilisateur correct est Chris, pas MYDOMAIN\Chris.

7
Owen Pauling

J'ai trouvé ce lien qui vérifie les groupes de sécurité AD:

authentification Active Directory dans ASP.NET MVC 5 avec authentification par formulaire et autorisation par groupe

La seule chose est que cette configuration utilise une page de connexion pour capturer les informations d'identification de nom d'utilisateur/mot de passe pour AD. J'ai changé l'authentification de "FORMS" à "WINDOWS" car mon application sera toujours accessible à partir du réseau. N'oubliez pas non plus de retirer le <forms> sous-balise de la <authentication> tag si vous n'allez pas utiliser l'authentification FORMS.

0
Red_Phoenix