2010-08-01 2 views
2

Мы используем для аутентификации пользователя на AD, используя следующий DirectoryEntry конструктор:LDAP аутентификации с использованием DirectoryEntry

new DirectoryEntry(path, domainName + "\\" + UserName, Password); 

Он используется для нормально работать, пока контроллер домена не был изменен.

Теперь, чтобы заставить его работать, мы должны использовать:

new DirectoryEntry(path, UserName, Password); 

Может кто-нибудь, пожалуйста, объясните разницу и почему второй метод работает сейчас, и первый не работает?

Примечание: Я не уверен, но я думаю, что функциональный уровень домена, поднятый до Server 2008 с сервера 2003 года. Разве это имеет значение?

ответ

5

Я не знаю, почему именно это когда-либо работал :-), и поэтому я не могу объяснить, почему другой вариант работает сейчас ....

Если вы работаете на .NET 3.5, вы можете использовать System.DirectoryServices.AccountManagement Пространство имен и легко проверить свои учетные данные:

// create a "principal context" - e.g. your domain (could be machine, too) 
using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN")) 
{ 
    // validate the credentials 
    bool isValid = pc.ValidateCredentials("myuser", "mypassword") 
} 

это просто, это надежно, это 100% C# управляемый код на вашей стороне - что еще можно желать? :-)

+0

Спасибо за ответ почему IAM с просьбой о помощи является код находится в производстве envoirment и существуют разные AD на разных deployments.We должны понимать, когда нам требуется доменное имя с пользователем, и когда нам не нужно Это. – Buzz

+1

@buzz: обычно я бы не принял никакого домена - поскольку домен действительно уже является частью пути LDAP. Также: обычно я бы использовал некоторое имя LDAP, например. различающееся имя 'CN = Buzz Aldrin, CN = Users, DC = YourDomain, DC = com', а не только имя пользователя Windows ... –

+0

Спасибо, что было полезно, если у кого-то есть пояснение для существующего сценария, это будет полезно, потому что на данный момент обновить базу кода непросто, мы пытаемся определить, какие изменения в AD могут привести к такому результату. – Buzz

1

Как правило, путь для этого используется следующим форматом является

DirectoryEntry("LDAP//:domainName"); 

Домен может быть либо URL, как: my.ldapDomain.com

или DistinguishedName как: DC = My , DC = ldapDomain, DC = COM

Боюсь, мы не можем дать вам больше информации о том, почему ваш код работал раньше и не сейчас, поскольку мы не можем видеть содержимое переменной «путь» и « domainName ", используемый в вашем коде.

Просьба предоставить подробную информацию

Смежные вопросы