Запросы AD в контексте аутентифицированного пользователя в веб-приложении ASP.NET Core MVC - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над веб-приложением на основе ASP.NET Core MVC 2.1.Он предоставляет возможность выполнять несколько операций, связанных с Active Directory.Одним из них является веб-клиент LAPS.Для связи с AD я использую System.DirectoryServices из Microsoft.Windows.Compatibility.

Поскольку LAPS хранит свои данные в атрибутах AD объектов компьютера (ms-Mcs-AdmPwd), мне нужно запросить этот атрибут, например, вот так:

using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, targetDomain)) {
    ComputerPrincipal computer = ComputerPrincipal.FindByIdentity(principalContext, IdentityType.Name, computerName);
    string password = (computer.GetUnderlyingObject() as DirectoryEntry).Properties["ms-Mcs-AdmPwd"].Value.ToString();
}

Итак, моя проблема: мне нужно сделать это в контексте аутентифицированного пользователя, потому что разрешения безопасности атрибута уже контролируют доступ к паролям LAPS.Я реализовал проверку подлинности с использованием cookie-файлов без запроса идентификатора PrincipalContext.ValidateCredentials() к AD для проверки подлинности пользователей.Каков наилучший способ добиться этого, не запрашивая у пользователя данные для входа во второй раз?

Существует конструктор PrincipalContext PrincipalContext(ContextType contextType, string name, string userName, string password), но для этого потребуется способ хранения пароля для каждого сеанса.,Думаю, хранение пароля в самом сеансе было бы плохой идеей.

Кроме того, я мог бы просто запросить данные на стороне сервера как ApplicationPoolIdentity или как отдельную учетную запись службы (для которой затем требовался бы полный доступ).соответствующие атрибуты всех объектов компьютера), а затем реализуйте некоторую логику, чтобы определить, разрешено ли зарегистрированному пользователю получить доступ к этому конкретному паролю.Но это приведет к ненужным усилиям, поскольку вся информация об авторизации уже существует как AD DACL.

Надеюсь, это как-то имеет смысл.Так что если кто-нибудь может подтолкнуть меня в правильном направлении, я был бы очень благодарен.Заранее спасибо!

1 Ответ

0 голосов
/ 21 октября 2018

В конце концов, я использовал картографический подход, чтобы определить, разрешен ли пользователю доступ к данным.Если пользователь является членом определенной группы AD, содержащей администраторов определенного отдела, и целевой объект компьютера находится в соответствующем подразделении, пароль будет запрошен и впоследствии отображен.ApplicationPoolIdentity выполняет фактический запрос AD.Пока работает без нареканий.

...