Próbuję uzyskać informacje o użytkowniku dla określonej domeny, która będzie wprowadzeniem programu. Na podstawie nazwy domeny powinna zwracać listę nazw użytkowników/lub NT Id i SID użytkownika. Jestem nowy w programowaniu ldap, może ktoś mi pomoże uzyskać tę listę.Jak uzyskać nazwę użytkownika i identyfikator SID dla użytkownika według nazwy domeny w ldap
Odpowiedz
Jeśli używasz .NET 3.5 lub nowszej wersji i rozmawiasz o Active Directory, powinieneś sprawdzić przestrzeń nazw System.DirectoryServices.AccountManagement
(S.DS.AM). Przeczytać o tym tutaj:
- Managing Directory Security Principals in the .NET Framework 3.5
- MSDN docs on System.DirectoryServices.AccountManagement
Zasadniczo, można określić kontekst domeny i łatwo znaleźć użytkowników i/lub grupy w AD:
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// do something here....
var usersSid = user.Sid;
// not sure what you mean by "username" - the "DisplayName" ? The "SAMAccountName"??
var username = user.DisplayName;
var userSamAccountName = user.SamAccountName;
}
nowy S.DS.AM ułatwia zabawę z użytkownikami i grupami w AD!
Aktualizacja: jeśli trzeba pętli wszystkich użytkowników domeny - spróbuj tego:
Można użyć PrincipalSearcher
i „query-przez-przykład” główny zrobić swoje poszukiwania:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
UserPrincipal qbeUser = new UserPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
UserPrincipal user = found as UserPrincipal;
if(user != null)
{
// do whatever here
var usersSid = user.Sid;
// not sure what you mean by "username" - the "DisplayName" ?
var username = user.DisplayName;
var userSamAccountName = user.SamAccountName;
}
}
Aktualizacja # 2: jeśli nie może (lub nie chcą) stosowanie metody S.DS.AM
- co jest najłatwiejsze, Active Directory, zdecydowanie - to trzeba by się znowu do System.DirectoryServices
klasy i metody:
// define the root of your search
DirectoryEntry root = new DirectoryEntry("LDAP://dc=YourCompany,dc=com");
// set up DirectorySearcher
DirectorySearcher srch = new DirectorySearcher(root);
srch.Filter = "(objectCategory=Person)";
srch.SearchScope = SearchScope.Subtree;
// define properties to load
srch.PropertiesToLoad.Add("objectSid");
srch.PropertiesToLoad.Add("displayName");
// search the directory
foreach(SearchResult result in srch.FindAll())
{
// grab the data - if present
if(result.Properties["objectSid"] != null && result.Properties["objectSid"].Count > 1)
{
var sid = result.Properties["objectSid"][0];
}
if(result.Properties["displayName"] != null && result.Properties["displayName"].Count > 0)
{
var userName = result.Properties["displayName"][0].ToString();
}
}
Cześć, Dzięki za odpowiedzi .. Ale w moim przypadku nie będę definiować żadnego użytkownika. Powinien to być pętla dla każdego użytkownika w domenie perticular .. – Eshwer
@Zamówiono: zaktualizowałem moją odpowiedź za pomocą pętli przez ** wszystkich ** użytkowników danej domeny - to ** BĘDZIE WOLNY **, jeśli masz wielu użytkowników. –
Cześć .. Ale gdzie jesteś podając adres URL ldap ..? lub nie jest wymagane? w tym przypadku skąd zajmie listę użytkowników? – Eshwer
Kiedy mówisz * LDAP *, masz na myśli * * Active Directory w systemie Windows, czy trzeba „ogólnych” rozwiązanie LDAP dla wszystkich możliwych serwerów LDAP .... –