Nano Hash - криптовалюты, майнинг, программирование

Почему нам нужно какое-то время ждать, чтобы получить последнюю информацию о группе из метода UserPrincipal.GetAuthorizationGroups?

У нас есть пользователь AD, скажем, userA, который является членом GroupA, GroupB.

Использование метода UserPrincipal.GetAuthorizationGroups дает эти группы.

Затем мы добавляем пользователя A в другую группу, скажем, GroupC.

Но сразу после добавления в новую группу и запуска метода UserPrincipal.GetAuthorizationGroups по-прежнему отображаются GroupA, GroupB. Группа C не отображается.

Если мы иногда ждем (около 10 минут) ИЛИ переключаем пользователя и снова входим в систему, тогда только метод UserPrincipal.GetAuthorizationGroups показывает GroupC вместе с GroupA, GroupB.

Почему мы должны ждать или входить снова, чтобы получить последнее значение?

Для метода UserPrincipal.GetGroups нам не нужно ждать или снова входить в систему. Мы используем метод UserPrincipal.GetAuthorizationGroups, поскольку нам также нужна вложенная группа.

29.01.2020

Ответы:


1

Похоже, что конкретной реализации нельзя доверять на 100%. Группы пользователей кешируются, и функция это не учитывает.

Достаточно сказать, что это имеет смысл в большинстве, если не во всех случаях. Новые группы применяются после входа в систему, и запросы к AD для каждого поиска кажутся излишними.

Дополнительные сведения и решение см. здесь: https://milestone.topics.it/2012/12/userprincipalgetauthorizationgroupsoh-my.html

IEnumerable<String> GetGroups( String samAccountName )
{
    var userNestedMembership = new List<string>();

    var domainConnection = new DirectoryEntry();
    domainConnection.AuthenticationType = System.DirectoryServices.AuthenticationTypes.Secure;

    var samSearcher = new DirectorySearcher();

    samSearcher.SearchRoot = domainConnection;
    samSearcher.Filter = "(samAccountName=" + samAccountName + ")";
    samSearcher.PropertiesToLoad.Add( "displayName" );

    var samResult = samSearcher.FindOne();

    if ( samResult != null )
    {
        var theUser = samResult.GetDirectoryEntry();
        theUser.RefreshCache( new string[] { "tokenGroups" } );

        foreach ( byte[] resultBytes in theUser.Properties[ "tokenGroups" ] )
        {
            var SID = new SecurityIdentifier( resultBytes, 0 );
            var sidSearcher = new DirectorySearcher();

            sidSearcher.SearchRoot = domainConnection;
            sidSearcher.Filter = "(objectSid=" + SID.Value + ")";
            sidSearcher.PropertiesToLoad.Add( "name" );

            var sidResult = sidSearcher.FindOne();
            if ( sidResult != null )
            {
                userNestedMembership.Add( ( string )sidResult.Properties[ "name" ][ 0 ] );
            }
        }
    }

    return userNestedMembership;
}
29.01.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..