Подтвердить что ты не робот

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

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

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

  • Измените web.config, чтобы использовать проверку подлинности Windows.
  • Настройте web.config на использование ActiveDirectoryMembershipProvider
  • Настройте web.config для использования настраиваемого RoleProvider, который выглядит в AD

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

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

4b9b3361

Ответ 1

Аутентификация по формам

Вы можете использовать обычную проверку подлинности с помощью форм для аутентификации пользователя в 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>

вам нужно будет использовать username @domain для успешной аутентификации пользователя.

Вот кое-что, чтобы вы начали


Проверка подлинности Windows

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

enter image description here

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

  1. Включить аутентификацию Windows
  2. Отключить анонимную аутентификацию

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

IIS 7 и IIS 8

  1. Откройте диспетчер IIS и перейдите на свой веб-сайт.
  2. В представлении функций дважды щелкните Аутентификация.
  3. На странице Аутентификация выберите Аутентификация Windows. Если проверка подлинности Windows не поддерживается, необходимо убедиться, что проверка подлинности Windows установлена на сервере.

    Чтобы включить проверку подлинности Windows в Windows: a) На панели управления откройте "Программы и компоненты". б) Выберите "Включить или отключить функции Windows". c) Перейдите к Информационным службам Интернета> World Wide Web Services> Безопасность и убедитесь, что проверен узел проверки подлинности Windows.

    Чтобы включить проверку подлинности Windows на Windows Server: a) В Диспетчере серверов выберите Веб-сервер (IIS) и нажмите Добавить службы ролей. Б) Перейдите на Веб-сервер> Безопасность и убедитесь, что проверен узел проверки подлинности Windows.

  4. На панели "Действия" нажмите "Включить", чтобы использовать проверку подлинности Windows.

  5. На странице Аутентификация выберите Анонимная аутентификация.
  6. На панели "Действия" нажмите "Отключить", чтобы отключить анонимную аутентификацию.

IIS Express

  1. Щелкните правой кнопкой мыши проект в Visual Studio и выберите "Использовать IIS Express".
  2. Нажмите на свой проект в обозревателе решений, чтобы выбрать проект.
  3. Если панель свойств не открыта, откройте ее (F4).
  4. На панели "Свойства" для вашего проекта: a) Установите "Анонимная аутентификация" на "Отключено". б) Установите "Аутентификация Windows" на "Включено".

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

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

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

и это оно!

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

@User.Identity.Name

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

enter image description here

Вот кое-что, чтобы вы начали

Ответ 2

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

Вы можете защитить свое веб-приложение MVC в сети Active Directory, аутентифицируя пользователей непосредственно по учетным данным их домена.

ШАГ 1: ACCOUNTCONTROLLER.CS

Замените свой файл AccountController.cs следующим:

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

ШАГ 2: ACCOUNTVIEWMODELS.CS

Обновите свой AccountViewModels.cs (или любой другой, названный вашим классом модели Account), чтобы он содержал только этот класс 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; }
}

ШАГ 3: WEB.CONFIG

Наконец, обновите файл Web.config чтобы включить эти элементы.

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

Для получения строки подключения LDAP может потребоваться несколько шагов:

  1. Установите средства удаленного администрирования сервера для Windows 7. Обязательно следуйте инструкциям после установки, чтобы добавить функцию в Windows через панель управления.

  2. Откройте командную строку и введите >dsquery server

    Допустим, команда возвращает следующее:

    CN=PRIMARY,CN=Servers,CN=DefaultFirstName,CN=Sites,CN=Configuration,DC=MyDomain,DC=Local
    
    • Имя сервера состоит из первого значения CN и двух последних значений DC, разделенных точками. Так что это primary.mydomain.local.

    • Порт 389.

    • Часть строки соединения после порта и косой черты является частью результата, начинающейся с первого "DC". Так что это DC=MyDomain,DC=Local.

    • Таким образом, полная строка подключения

      LDAP://primary.mydomain.local:389/DC=MyDomain,DC=Local.
      
    • Пользователи будут входить, используя только свое имя пользователя без домена. Поэтому правильное имя пользователя - Крис, а не MYDOMAIN\Chris.

Ответ 4

Я нашел эту ссылку, которая проверяет группы безопасности AD:

Проверка подлинности Active Directory в ASP.NET MVC 5 с проверкой подлинности с помощью форм и авторизацией на основе групп

Единственное, что эта установка использует логин на странице, чтобы захватить учетные данные имени пользователя/пароля для AD. Я изменил аутентификацию с "FORMS" на "WINDOWS", так как мое приложение всегда будет доступно из сети. Также не забудьте удалить подтэг <forms> из тега <authentication> если вы не собираетесь использовать аутентификацию FORMS.