DirectorySearcher всегда возвращает пустой результат - PullRequest
0 голосов
/ 21 марта 2019

У меня есть этот код, который работает на PowerShell против AD, и он работает правильно, он возвращает пользователя

$de = New-Object -TypeName System.DirectoryServices.DirectoryEntry - 
ArgumentList "LDAP://DC=organizationname,DC=com", "username", "password", 
"Secure"
$ds = New-Object -TypeName System.DirectoryServices.DirectorySearcher - 
ArgumentList $de, "(&(objectClass=user)(anr=myusername))", 
@("sAMAccountName", "mail", "displayName"), "Subtree"
$ds.FindAll()

Но когда я запускаю тот же код на asp.net mvc, используя DirectorySearcher, он всегда возвращает пустой результат.

В чем может быть проблема? Как мне отладить это?

string username = ConfigurationManager.AppSettings["ADUsername"];
string password = ConfigurationManager.AppSettings["ADPassword"];
string displayName = ConfigurationManager.AppSettings["ADDisplayName"];

using (var de = new DirectoryEntry(adUsersContainer, username, password, AuthenticationTypes.Secure))
{
    IList<User> items = new List<User>();
    string[] props = { "sAMAccountName", "mail", displayName };

    using (var ds = new DirectorySearcher(de, "(&(objectClass=user)(anr=" + anr + "))", props, SearchScope.Subtree))
    {
        ds.PageSize = 1000;
        IEnumerable<SearchResult> results = SafeFindAll(ds);

        foreach (SearchResult result in results)
        {
            var user = new User
                    {
                        Username = GetPropertyValue(result.Properties, "sAMAccountName"),//;//[0].ToString(),
                        Email = GetPropertyValue(result.Properties, "mail"),
                        DisplayName = GetPropertyValue(result.Properties, displayName)
                    };

            if (!string.IsNullOrWhiteSpace(user.Email))
            {
                items.Add(user);
            }
        }
    }

    return items;
}

Это приложение для внутренней сети, которое размещено и должно работать с проверкой подлинности Windows, поэтому пользователи, вошедшие в систему на своем компьютере, должны иметь возможность заходить на сайт без входа в систему, но:

  1. они продолжают получать приглашение на вход в систему
  2. и когда мы пытаемся вытащить пользователя из AD (мы можем получить пользователя из Identity - см. Ниже), но он все равно возвращает пустые результаты.

Код:

string identityName = User.Identity.Name;
int index = identityName.LastIndexOf('\\');
string username = index >= 0 ? identityName.Substring(index + 1) : identityName;

Мысли?

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