Настроить ASP.NET MVC для аутентификации по AD

Каковы шаги высокого уровня для проверки подлинности пользователей приложения ASP.NET MVC в Active Directory?

Я предполагаю что-то вроде:

Modify web.config to use Windows authentication Configure web.config to use the ActiveDirectoryMembershipProvider Configure the web.config to use a custom RoleProvider that looks in AD

Выглядит ли вышесказанное разумным, и если да, то куда мне поместить действительную логику обнаружения пользователя?

В моем случае действительный пользователь - это человек в определенном домене AD.

Ответы на вопрос(2)

Вот решение из учебникаКрис Шиффхауэр - Реализация аутентификации Active Directory в ASP.NET MVC 5:

You can secure your MVC web application on an Active Directory network by authenticating users directly against their domain credentials.

STEP 1: ACCOUNTCONTROLLER.CS

Replace your AccountController.cs file with the following:

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");
    }
}
STEP 2: ACCOUNTVIEWMODELS.CS

Update your AccountViewModels.cs (or whatever your Account model class is named) to contain only this LoginModel class:

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; }
}
STEP 3: WEB.CONFIG

Finally, update your Web.config file to include these elements.

<?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>
It may take a few steps to get your LDAP connection string:

Install Remote Server Administration Tools for Windows 7. Be sure the follow the post-installation instructions to add the feature to Windows via the control panel.

Open a command prompt and enter >dsquery server

Let’s say the command returns the following:

CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local

The server name is composed of the first CN value, and the two last DC values, separated by dots. So it's primary.mydomain.local.

The port is 389.

The portion of the connection string after the port and forward slash is the portion of the result beginning with the first "DC". So it's DC=MyDomain,DC=Local.

So the full connection string is

LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.

Users will login using just their username without the domain. So the correct username is Chris, not MYDOMAIN\Chris.

 29 нояб. 2018 г., 14:06
Сервер dsquery дает мне 3 CN = PRIMARY01, CN = PRIMARY02 и CN = PRIMARY03? Какое использование?
 29 дек. 2018 г., 02:52
Это работает и для меня с Windows 10, но сообщение нужно изменить, как & quot; Установить средства удаленного администрирования сервера для ОС Windows 7 Server & quot;
 29 нояб. 2018 г., 15:42
Windows Authentication, а не проверка подлинности с помощью форм?
 20 сент. 2017 г., 20:06
Ссылка не работает (404)
Решение Вопроса
Forms Authentication

аутентификации пользователя в Active Directory, для этого вам просто нужна строка подключения AD:

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

и добавьте поставщика членства, чтобы использовать это соединение:

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

вам нужно будет использовать[email protected] успешно аутентифицировать пользователя.

Here is something to get you started

http://helios.ca/2009/05/04/aspnet-mvc-forms-authentication-with-active-directory/ Windows Authentication

Если вы начинаете свой проект новым, вы всегда можете выбратьIntranet application из шаблона и все позаботятся о вас

enter image description here

Если вы хотите сделать это вручную, вам нужно изменить:

Enable Windows Authentication Disable Anonymous authentication

для получения подробной информации о том, как это сделать на IIS7 / 8 и IISExpress:

IIS 7 & IIS 8

Open IIS Manager and navigate to your website. In Features View, double-click Authentication.

On the Authentication page, select Windows authentication. If Windows authentication is not an option, you'll need to make sure Windows authentication is installed on the server.

To enable Windows authentication on Windows: a) In Control Panel open "Programs and Features". b) Select "Turn Windows features on or off". c) Navigate to Internet Information Services > World Wide Web Services > Security and make sure the Windows authentication node is checked.

To enable Windows authentication on Windows Server: a) In Server Manager, select Web Server (IIS) and click Add Role Services b) Navigate to Web Server > Security and make sure the Windows authentication node is checked.

In the Actions pane, click Enable to use Windows authentication.

On the Authentication page, select Anonymous authentication. In the Actions pane, click Disable to disable anonymous authentication.

IIS Express

Right click on the project in Visual Studio and select Use IIS Express. Click on your project in the Solution Explorer to select the project. If the Properties pane is not open, open it (F4). In the Properties pane for your project: a) Set "Anonymous Authentication" to "Disabled". b) Set "Windows Authentication" to "Enabled".

В вашемweb.config есть что-то вроде

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

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

и это все!

Теперь, когда вы хотите личность пользователя, просто позвоните

@User.Identity.Name

и это покажет вамDomain\Username как для меня:

enter image description here

Here is something to get you started

http://www.asp.net/mvc/tutorials/older-versions/security/authenticating-users-with-windows-authentication-cs
 18 мар. 2016 г., 22:24
Вам не нужно ничего, что является простым примером дляMembershipProviderстрока подключения является строкой LDAP:connectionString="LDAP://YourConnection"
 18 мар. 2016 г., 20:35
Я не понимаю, нет страницы входа? Следует либо попросить войти в систему, либо получить зарегистрированного в данный момент пользователя no? Не уверен, что понимаю, так как вы жестко закодировали имя пользователя / pwd в web.config
 06 июл. 2018 г., 18:12
@coolbreeze - на тот случай, если это не совсем понятно (извините, если я собираю) - представьте Active Directory как базу данных, а LDAP - это «технология»; это помогает общаться с базой данных. Строка подключения в web.config содержит только аутентификацию для доступа к AD «база данных». текущий вошедший в систему пользователь проходит аутентификацию в AD, как это было установлено и объяснено. Мы используем это в нашей организации.
 18 мар. 2016 г., 21:24
Я имею в виду это `` `connectionStringName = & quot; ADConn & quot; connectionUsername = & Quot; домен / пользователь & Quot; connectionPassword = & Quot; PWD & Quot; / & GT; `` `
 18 мар. 2016 г., 21:21
@coolbreeze нет ничего жестко закодированного, имя пользователя приходит от вас при входе в систему на компьютере Windows, вот чтоWindows Аутентификация есть, так почему бы снова запросить пароль?

Ваш ответ на вопрос