Getting to connect users with an ldap with two groups - active-directory

I have an application with which I would like to connect my ldap users.
I want two types of users to be able to log in: internal and external.
In the application that I deploy, three parameters are taken into account (ldapjs protocol, scope sub)
export LDAP_FILTER LDAP_BASEDN LDAP_UIDTAG
How do I get
"OU=Internal,OU=Users,DC=test,DC=example,DC=com"
and
"OU=External,OU=Users,DC=test,DC=example,DC=com"
members to connect to it?
How should I fill in these parameters knowing that the cn is username ?
Thank you for your help
I tried
export LDAP_FILTER (|(&(ou=Internal)(cn={{username}}))(&(ou=External)(cn={{username}}))
and many more

Those are OU's (organizational units) not groups. You cannot filter by OU in an LDAP filter. You use the Base DN to limit results to one OU. However, you can only use one.
You may be better off creating a group and adding all of the users from both OUs into that group, and then you can filter on the group, like this:
(memberOf=CN=MyAppGroup,OU=Groups,DC=test,DC=example,DC=com)
That should be the full distinguishedName of the group.

Related

LDAP Query to get all objects that are of objectCategory user or decend from user

I am trying to find a objectCategory query that will return all the "users" in my active directory.
I thought this would be as simple as (objectCategory=user). And while that does return the bulk of my users, it does not return them all.
I have some Group Managed Service Accounts (gMSA) in my Active Directory. They have the objectCategory of msDS-GroupManagedServiceAccount. When I look up msDS-GroupManagedServiceAccount it indicates that it has fields derived from user.
That leads me to to believe that msDS-GroupManagedServiceAccount is a subclass of user. Which leads to my question:
Is there a way to indicate that I want all objects that are of objectCategory user AND all objects that descend from objectCategory user?
Search by objectClass instead of objectCategory:
(objectClass=user)
The objectClass attribute started being indexed in Windows Server 2008, so as long as you're running 2008+, it will be just as fast as searching by objectCategory.
Not a complete answer to your bolded question, but a workaround for for your particular case would be to use an or expression.
(|(objectCategory=person)(objectCategory=msDS-GroupManagedServiceAccount))

LDAP CN as a container

I was running a script to pull back LDAP paths, and I noticed that some DN has 2 CN entries eg
CN=User1,CN=Users,DC=....
CN=User1,CN=Users,DC=....
I was wondering if this was possible to have set up inside AD, and if it is then why would a OU not be used instead of 2 CN's. I was under the impression that best practice would be to only have 1 CN as the terminal object.
Thanks for reading.
Those user DN's you show are in the built-in Users container. Note they are a container, not an OU. Thus, they are indicated in a distinguished name with "CN".
An OU is indicated with "OU".
The difference between a container and OU was answered here, but in short, the only difference really is that you cannot specify group policies on containers (but they do inherit policies).

Is it possible to find all users in groups in an OU in LDAP?

I have to get all users (not USER objects, but users added to groups) inside the groups of a determined OU.
Is it possible or should I first look for groups then loop them and find its users?
AFAIK in ActiveDirectory group membership is stored inside the user-node. Therefore it should be possible to select all users that have a group-attribute set and that are below the given OU.
In ldapsearch that should look something like this:
ldapsearch -h ldap -b "ou=known,..." (memberof=*) cn```
where memberof=* is the filter to ´query for all entries that have a "memberof"-attribute set. You can extend that filter to query also for a certain objecttype to only get user-nodes if that is a problem in this setup.
Sorry, I can't test it currently as I don't have an ActiveDirectory at hand.

How do I write a LDAP Query to search an OU for users that do NOT have an email address?

I know how to search AD to find all users with an email address but I need to include the syntax for a LDAP Query, can you help? Also, how would I export this list to excel?
Unfortunately, there is no way to determine an empty or null value using an LDAP query - what you would have to do is query all users, then write some business logic to find the ones with empty values in the mail property.
Finding all of them is quite easy, you could simply do :
(&(objectClass=user)(mail=*))

What does dsget use to query the directory?

I am in an organization with an Active Directory with a very deep nested group structure. I would like to query the directory to recursively find user members of a group from a Linux machine. On a Windows machine,
dsget group "dn_of_group" -members -expand
does exactly what I want and does it very quickly. When I tried to get the same results via LDAP with
(memberOf:1.2.840.113556.1.4.1941:=dn_of_group)
the query takes almost a minute to run. Does dsget use LDAP under the hood or does it use some other means to query the directory? And if so, is there any way for me to also use that?
Edit:
Clarified that I need the members which are users.
The framework 3.5 with System.DirectoryServices.AccountManagement Namespace provides a method that searches all groups recursively and returns the groups in which the user is a member. The returned set may also include additional groups that system would consider the user a member of for authorization purposes.
UserPrincipal.GetAuthorizationGroups()
The groups that are returned by this method may include groups from a different scope and store than the principal. For example, if the principal is an AD DS object that has a DN of "CN=SpecialGroups,DC=Fabrikam,DC=com, the returned set can contain groups that belong to the "CN=NormalGroups,DC=Fabrikam,DC=com
In the other direction you've got :
GroupPrincipal.GetMembers(bool recursive)
See Remarks

Resources