Невозможно установить пароль с помощью DirectoryEntry.Invoke, когда пользователь создается в AD с использованием ASP.NET C#

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

DirectoryEntry Folder = new DirectoryEntry("LDAP://XXXX.com/CN=ContainerName, DC=XXXX, DC=com", admin, adminPwd, AuthenticationTypes.None);

    if (Folder.SchemaEntry.Name == "container")
    {
        DirectoryEntry user = Folder.Children.Add("CN=" + txtFirstname.Text + " " + txtLastname.Text, "User");

        if (DirectoryEntry.Exists(user.Path))
        {
            // Error Msg Here
        }
        else
        {
            // Required attributes
            if (txtFirstname.Text != "" && txtLastname.Text != "") { user.Properties["sAMAccountName"].Value = txtFirstname.Text.ToLower() + "." + txtLastname.Text.ToLower(); }
            if (txtFirstname.Text + " " + txtLastname.Text != "") { user.Properties["cn"].Value = txtFirstname.Text + " " + txtLastname.Text; }
            // More controls to populate Optional AD attributes.  Not entered to conserve space.  The code works however.

            user.CommitChanges();

            int val = (int)user.Properties["userAccountControl"].Value;
            user.Properties["userAccountControl"].Value = val & ~0x2;
            user.Properties["pwdLastSet"].Value = 0;
            user.CommitChanges();
            user.Invoke("SetPassword", new object[] { "SuperSecretPassword" });
            user.CommitChanges();
        }

Проблема в том, что после создания учетной записи метод вызова не может установить пароль. Каждая попытка установить пароль возвращает эту ошибку в операторе catch:

System.Reflection.TargetInvocationException was caught
HResult=-2146232828
Message=Exception has been thrown by the target of an invocation.
Source=System.DirectoryServices
StackTrace:
   at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args)
   at Personnel_Govt.CreateUser() in c:\inetpub\wwwroot\TestingFolder\Personnel\Add\Govt.aspx.cs:line 148
   at Personnel_Govt.btnSubmit_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\TestingFolder\Personnel\Add\Govt.aspx.cs:line 95
InnerException: System.UnauthorizedAccessException
   HResult=-2147024891
   Message=One or more input parameters are invalid

   Source=Active Directory
   InnerException: 

Если пароль установлен вручную в AD с установленным флажком «Требуется сброс» после создания учетной записи, он будет работать.

Почему метод установки пароля не работает???


person Dennis    schedule 04.03.2015    source источник


Ответы (1)


Проблема решена. По-видимому, учетная запись для информационных служб Интернета (IIS_IUSRS) не имела разрешений на установку паролей для активного каталога. Он мог ИЗМЕНЯТЬ пароли, но не УСТАНАВЛИВАТЬ их.

Чтобы разрешить странице ASP.NET УСТАНОВИТЬ пароль AD при создании учетной записи, мне пришлось запустить «Пользователи и компьютеры Active Directory», щелкнуть правой кнопкой мыши домен и выбрать «Делегирование управления». Откроется мастер, который позволит вам предоставить разрешения учетной записи IIS_IUSRS для внесения изменений в AD.

person Dennis    schedule 04.03.2015