Разблокировать учетную запись Active Directory через C # - PullRequest
0 голосов
/ 03 октября 2018

У меня есть сервер web / IIS (Win2012R2), на котором пользователи проходят проверку подлинности в Active Directory (DC = Win2016).Я не могу разблокировать учетную запись AD через C # с этого веб-сервера.Как я могу это сделать?

То, что я пробовал или доказал:

  1. Создание учетной записи администратора домена и явное использование этих учетных данных при создании экземпляра PrincipalContext.Также войдите в контроллер домена с этой учетной записью администратора и успешно разблокируйте учетную запись (вручную).Независимо от того, передаю ли я PrincipalContext с жестко закодированными учетными данными или нет, я могу подтвердить, что учетные данные действительны в любом случае (например, ctx.ValidateCredentials("my_user", "my_pwd")).Я могу подтвердить, что мой UserPrincipal не является нулевым, и что я могу прочитать правильное значение заблокированного статуса пользователя через IsAccountLockedOut().

  2. Я могу успешно разблокировать учетную запись, используяPowerShell с веб-сервера с использованием любой учетной записи администратора домена.

Код:

string usr = HttpContext.Current.Session["CurrentUsername"].ToString();
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, usr);

if(user != null && user.IsAccountLockedOut()) {
    user.UnlockAccount();
}

Ошибка:

System.UnauthorizedAccessException: доступОтклонено.
в System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.SetInfo ()
в System.DirectoryServices.DirectoryEntry.CommitChanges ()
в System.DirectoryServices.AccountManagement.SDSUtils.WriteAringСтроковый атрибут, значение Int32, учетные данные NetCred, AuthenticationTypes authTypes)
в System.DirectoryServices.AccountManagement.ADStoreCtx.WriteAttribute (главный p, атрибут String, значение Int32)
в System.DirectoryServices.AccountManagement..UountAntp)
в System.DirectoryServices.AccountManagement.AccountInfo.UnlockAccount ()
в ASP.en_us_forgot_aspx.btnPassword_OnClick (Отправитель объекта, EventArgs e)

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Проблема в моем коде была связана с неправильным определением PrincipalContext .Как только я последовал примеру документации точно для UserPrincipal Constructors и обнаружил путь OU учетной записи администратора, которую я использовал для разблокировки, я решил проблему.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
                                            "ad.domainname.com",
                                            "OU=SomeOU,DC=ad,DC=domainname,DC=com",
                                            "myadminuser",
                                            "MyPa$sW0rd");
0 голосов
/ 04 октября 2018

Контекст здесь не актуален.Учетная запись, выполняющая процесс веб-сайта в IIS, должна иметь разрешение на разблокировку.

У меня есть сайт, который делает это, и мне пришлось настроить сайт в IIS для работы с использованием специальной учетной записи домена, созданной для этой цели, которая имеет только те конкретные разрешения, которые ему необходимы.Вам не нужна или не нужна полная учетная запись администратора домена, доступная таким образом через веб-сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...