Как запросить свойства делегирования учетной записи пользователя Active Directory?

Я пишу утилиту для аудита конфигурации службы WCF. Для правильной передачи учетных данных от клиента через службу WCF обратно в серверную часть SQL учетная запись домена, используемая для запуска службы, должна быть настроена в Active Directory с параметром «Доверять этому пользователю для делегирования» (Свойства -> «Делегирование вкладку ").

Используя С#, как мне получить доступ к настройкам на этой вкладке в Active Directory. Я провел последние 5 часов, пытаясь отследить это в Интернете, и не могу найти.

Вот что я сделал до сих пор:

using (Domain domain = Domain.GetCurrentDomain())

{ Console.WriteLine(домен.Имя);

// get domain "dev" from MSSQLSERVER service account
DirectoryEntry ouDn = new DirectoryEntry("LDAP://CN=Users,dc=dev,dc=mydomain,dc=lcl");
DirectorySearcher search = new DirectorySearcher(ouDn);

// get sAMAccountName "dev.services" from MSSQLSERVER service account
search.Filter = "(sAMAccountName=dev.services)";
search.PropertiesToLoad.Add("displayName");
search.PropertiesToLoad.Add("userAccountControl");

SearchResult result = search.FindOne();
if (result != null)
{
    Console.WriteLine(result.Properties["displayName"][0]);
    DirectoryEntry entry = result.GetDirectoryEntry();

    int userAccountControlFlags = (int)entry.Properties["userAccountControl"].Value;
    if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_FOR_DELEGATION)
        Console.WriteLine("TRUSTED_FOR_DELEGATION");
    else if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION)
        Console.WriteLine("TRUSTED_TO_AUTH_FOR_DELEGATION");
    else if ((userAccountControlFlags & (int)UserAccountControl.NOT_DELEGATED) == (int)UserAccountControl.NOT_DELEGATED)
        Console.WriteLine("NOT_DELEGATED");

    foreach (PropertyValueCollection pvc in entry.Properties)
    {
        Console.WriteLine(pvc.PropertyName);
        for (int i = 0; i < pvc.Count; i++)
        {
            Console.WriteLine("\t{0}", pvc[i]);
        }
    }

}

}

«userAccountControl» не кажется правильным свойством. Я думаю, что это связано с разделом «Параметры учетной записи» на вкладке «Учетная запись», что не то, что мы ищем, но это самое близкое, что я получил до сих пор.

Обоснование всего этого таково: у нас нет разрешения на настройку сервиса в QA или в продакшене, поэтому вместе с нашими письменными инструкциями (которые, как известно, соблюдаются лишь частично) я создаю инструмент, который будет проверять настройку (WCF и SQL), чтобы определить правильность установки. Это позволит человеку, развертывающему службу, запустить эту утилиту и убедиться, что все настроено правильно, что сэкономит нам часы головной боли и сократит время простоя во время развертывания.


person Mark J Miller    schedule 05.05.2010    source источник


Ответы (2)


Возможно, слишком поздно, но э... нашел, поэтому решил поделиться.

Рассматриваемое свойство называется «msDS-AllowedToDelegateTo», и оно будет отображаться только для учетных записей с настроенными значениями имени участника-службы, но оно дает вам полный список всех служб, делегирование которых разрешено вашему объекту.

Надеюсь, это избавит кого-то еще от необходимости читать спецификацию kerberos в течение нескольких часов.

person Jesse MacNett    schedule 03.06.2013

Хорошо, я был неправ. Когда я запустил его в первый раз, userAccountControl не установил TRUSTED_FOR_DELEGATION. Я не знаю, была ли это проблема с кэшированием или нет. Я добавил:

entry.RefreshCache (новая строка [] {"userAccountControl"});

чтобы убедиться, что он не кэширует значение. Не знаю, работает это или нет, но на всякий случай добавил.

person Mark J Miller    schedule 05.05.2010