Настройка ASP.NET MVC для аутентификации против AD
Каковы шаги высокого уровня для аутентификации пользователей приложения ASP.NET MVC с Active Directory?
Я предполагаю что-то вроде:
- Измените web.config, чтобы использовать проверку подлинности Windows.
- Настройте web.config на использование ActiveDirectoryMembershipProvider
- Настройте web.config для использования настраиваемого RoleProvider, который выглядит в AD
Означает ли это выше мнение, и если да, то где я могу поместить правильную логику обнаружения пользователя?
В моем случае действительный пользователь - это кто-то в определенном домене AD.
Ответы
Ответ 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]()
Если вы хотите сделать это вручную, вам нужно изменить:
- Включить аутентификацию Windows
- Отключить анонимную аутентификацию
для получения подробной информации о том, как это сделать на IIS7/8 и IISExpress:
IIS 7 и IIS 8
- Откройте диспетчер IIS и перейдите на свой веб-сайт.
- В представлении функций дважды щелкните Аутентификация.
-
На странице Аутентификация выберите Аутентификация Windows. Если проверка подлинности Windows не поддерживается, необходимо убедиться, что проверка подлинности Windows установлена на сервере.
Чтобы включить проверку подлинности Windows в Windows: a) На панели управления откройте "Программы и компоненты". б) Выберите "Включить или отключить функции Windows". c) Перейдите к Информационным службам Интернета> World Wide Web Services> Безопасность и убедитесь, что проверен узел проверки подлинности Windows.
Чтобы включить проверку подлинности Windows на Windows Server: a) В Диспетчере серверов выберите Веб-сервер (IIS) и нажмите Добавить службы ролей. Б) Перейдите на Веб-сервер> Безопасность и убедитесь, что проверен узел проверки подлинности Windows.
-
На панели "Действия" нажмите "Включить", чтобы использовать проверку подлинности Windows.
- На странице Аутентификация выберите Анонимная аутентификация.
- На панели "Действия" нажмите "Отключить", чтобы отключить анонимную аутентификацию.
IIS Express
- Щелкните правой кнопкой мыши проект в Visual Studio и выберите "Использовать IIS Express".
- Нажмите на свой проект в обозревателе решений, чтобы выбрать проект.
- Если панель свойств не открыта, откройте ее (F4).
- На панели "Свойства" для вашего проекта: 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 может потребоваться несколько шагов:
-
Установите средства удаленного администрирования сервера для Windows 7. Обязательно следуйте инструкциям после установки, чтобы добавить функцию в Windows через панель управления.
-
Откройте командную строку и введите >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.
Ответ 3
Это сообщение в блоге, в котором описывается, как использовать cookie проверки подлинности OWIN вместе с Active Directory в решении ASP.NET MVC 5.
Сообщение в блоге:
http://tech.trailmax.info/2016/03/using-owin-and-active-directory-to-authenticate-users-in-asp-net-mvc-5-application/
Github:
https://github.com/trailmax/OwinADAuthentication
Ответ 4
Я нашел эту ссылку, которая проверяет группы безопасности AD:
Проверка подлинности Active Directory в ASP.NET MVC 5 с проверкой подлинности с помощью форм и авторизацией на основе групп
Единственное, что эта установка использует логин на странице, чтобы захватить учетные данные имени пользователя/пароля для AD. Я изменил аутентификацию с "FORMS" на "WINDOWS", так как мое приложение всегда будет доступно из сети. Также не забудьте удалить подтэг <forms>
из тега <authentication>
если вы не собираетесь использовать аутентификацию FORMS.