аутентификация пользователя без OU с использованием LDAP - PullRequest
1 голос
/ 15 октября 2011

Я пытаюсь аутентифицировать пользователя, используя LDAP

Я использую этот код:

public bool IsAuthenticated(string domain, string username, string pwd)
{

DirectoryEntry nRoot = new DirectoryEntry("LDAP://192.134.1.142/dc=testDomain,dc=com");
nRoot.AuthenticationType = AuthenticationTypes.None;
nRoot.Username = "uid=username,dc=testDomain,DC=com";  //full dn
nRoot.Password = "pwd";

try
{ 
//Bind to the native AdsObject to force authentication.
Object obj = nRoot.NativeObject;

DirectorySearcher search = new DirectorySearcher(nRoot);

search.SearchScope = SearchScope.Subtree;
search.Filter = "uid=username";               
search.PropertiesToLoad.Add("uid");

SearchResult sr = search.FindOne();
if(null == sr )
{
  return false;
}
// Update the new path to the user in the directory
_path = sr.Path;
_filterAttribute = (String)result.Properties["uid"][0];
  }
 catch (Exception ex)
 {
 throw new Exception("Error authenticating user. " + ex.Message);
 }
 return true;
 }

Здесь, если пользователь не является частью какого-либо подразделения, код работает нормально, но если он является частью подразделения, он не будет работать, и я получаю ошибку

System.Runtime.InteropServices.COMException на
// Привязка к нативному AdsObject для принудительной аутентификации. Объект obj = nRoot.NativeObject;

Как я могу получить подтверждение пользователя, принадлежащего OU или любой другой группе ??

Я пытался кодировать OU, и это сработало, но я не могу попросить пользователя ввести его OU

 nRoot.Username = "uid=username,ou=test,dc=testDomain,DC=com";  //full dn

Ответы [ 2 ]

1 голос
/ 26 января 2014
string ldapsrv = "mydomain.com:389";
string dc_oq = "OU=domain_app_auth,DC=domain,DC=uk,DC=com";//,
user_nme = "username";
pws = "password";

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, ldapsrv, dc_oq, ContextOptions.Negotiate | ContextOptions.Negotiate))
{
    isValid = pc.ValidateCredentials(user_nme, pws);
}
0 голосов
/ 18 октября 2011

Вам нужно взять имя пользователя, найти объект, чей uid = username, а затем прочитать атрибут difishedName или имя возвращаемого объекта (который будет полным DN) и войти в систему с этим обнаруженным полным DN.

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