ASP.NET MVC-authentifier les utilisateurs contre Active Directory, mais exiger que le nom d'utilisateur et le mot de passe soient entrés

je développe une application MVC3 qui exigera qu'un utilisateur soit authentifié contre une annonce. Je sais qu'il y a une option dans MVC3 pour créer une Application Intranet qui authentifie automatiquement un utilisateur contre une publicité, mais elle utilise L'authentification Windows et les connecte automatiquement. Cette application est accessible sur les postes de travail "ouverts" où l'utilisateur doit entrer son nom D'Utilisateur et son mot de passe. Les exemples ou tutoriel en ligne serait formidable. Un exemple de projet serait exceptionnel.

44
demandé sur amit_g 2011-05-27 08:31:21

2 réponses

vous pouvez utiliser le modèle de demande Internet standard avec authentification forms et insérer un ActiveDirectoryMembershipProvider dans le web.config :

<connectionStrings>
    <add name="ADConnectionString" connectionString="LDAP://YOUR_AD_CONN_STRING" />
</connectionStrings>

<system.web>
    <authentication mode="Forms">
        <forms name=".ADAuthCookie" loginUrl="~/Account/LogOn"
               timeout="15" slidingExpiration="false" protection="All" />
    </authentication>
    <membership defaultProvider="MY_ADMembershipProvider">
        <providers>
            <clear />
            <add name="MY_ADMembershipProvider" 
                 type="System.Web.Security.ActiveDirectoryMembershipProvider" 
                 connectionStringName="ADConnectionString"
                 attributeMapUsername="sAMAccountName" />
        </providers>
    </membership>
</system.web>

de cette façon, vous obtenez le formulaire de connexion de modèle D'application Internet, et il valide contre AD pour vous.

alors c'est juste une question de nettoyage de AccountController pour supprimer réinitialiser le mot de passe/Changer le mot de passe/Enregistrer la fonctionnalité en laissant juste L'ouverture de session.

44
répondu Khepri 2018-01-02 18:23:43

Comme mentionné ci-dessus, vous pouvez utiliser le fournisseur d'appartenances définis dans le web.fichier de configuration.

le code ci-dessous fait partie de l'implémentation du 'AccountController' du Code modèle MVC 3 et a été légèrement modifié pour fonctionner avec ActiveDirectory:

 [HttpPost]
    public ActionResult LogOn( LogOnModel model, string returnUrl )
    {
      if( ModelState.IsValid )
      {
        // Note: ValidateUser() performs the auth check against ActiveDirectory
        // but make sure to not include the Domain Name in the User Name
        // and make sure you don't have the option set to use Email Usernames.
        if( MembershipService.ValidateUser( model.UserName, model.Password ) )
        {
            // Replace next line with logic to create FormsAuthenticationTicket
            // to encrypt and return in an Http Auth Cookie or Session Cookie
            // depending on the 'Remember Me' option.
            //FormsService.SignIn( model.UserName, model.RememberMe );

            // Fix this to also check for other combinations/possibilities
            if (!String.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

si vous utilisez .NET 3.5 -- alors lire cet article pour l'alternative:

10
répondu cpoDesign 2017-05-23 12:16:51