У меня есть этот код, который работает на 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, поэтому пользователи, вошедшие в систему на своем компьютере, должны иметь возможность заходить на сайт без входа в систему, но:
- они продолжают получать приглашение на вход в систему
- и когда мы пытаемся вытащить пользователя из AD (мы можем получить пользователя из Identity - см. Ниже), но он все равно возвращает пустые результаты.
Код:
string identityName = User.Identity.Name;
int index = identityName.LastIndexOf('\\');
string username = index >= 0 ? identityName.Substring(index + 1) : identityName;
Мысли?