In addition to the common parameters, the Active Directory (AD) backend has the following additional configurable parameters:

  • membership_check: Enable AD group membership check enables AD specific non-primary group membership checking.


    The AD user’s primary group is always checked regardless of this setting.

    • nested_groups: Enable nested groups allows AD nested group support. See below for details.

Additionally, AD supports case and accent insensitive matching in many of the user and group name attributes. Since SPS relies on the server to perform comparisons, case and accent insensitive user and group name support depends solely on the server configuration.

User identification in AD

To determine the user entry for a given plain username, SPS performs a search under user_base_dn for objects having either the sAMAccountName or the userPrincipalName equal to the plain username of the user. The objectClass of the user object is not restricted.


Although userPrincipalName in AD is a Internet-style name like, it matches simple names like user.

Only the user object returned here is used for group membership checks.

Group membership resolution in AD

For all group membership checks, only the LDAP user object returned during user identification phase is used.

The plain group name is always compared to the cn attribute of the group object.

A user is treated as a member of a group if both the group object’s objectClass and objectCategory is group, and any of the following is true:

  • The group is the user’s primary group. That is, the objectSID attribute of the group matches the Security Identifier calculated from the user object’s objectSID and primaryGroupID attributes, as described in the Microsoft Support article How to use the PrimaryGroupID attribute to find the primary group for a user.


    When using the AD backend, this check is always performed, even if the membership_check option is disabled. However, it is OK for the user to have no primary group.

  • The group lists the user’s short username. That is, the group’s memberUid attribute contains the short username from the user object.

    This check is performed only when the membership_check option is enabled for AD.


    For the purpose of this check, the user’s short username is retrieved from the user object’s sAMAccountName attribute only, which is a single-valued attribute in AD. This is a known limitation.

    It is OK for the sAMAccountName attribute to be missing, in which case this check will be skipped.

  • The group lists the user’s dn. That is, the group object’s member attribute contains the user’s dn.

    This check is performed only when the membership_check option is enabled for AD.

    This is the only place where nested groups are supported. When the nested_groups setting is enabled in the configuration, SPS will also find groups which do not directly contain the user’s dn in their member attribute, but do contain an intermediate group’s dn, which in turn contains the user dn in its member attribute. This nesting can be arbitrarily deep, limited only by AD.


    Due to the nature of the way AD resolves the nested group chain, intermediate groups might be outside the configured group_base_dn.


Although an objectCategory in AD is a DN-valued attribute, it does match simple names like group.

Additionally, a user is treated as a member of a group if:

  • The group lists the user’s dn in any of the additional group objects configured in user_dn_in_groups.

    For example, if a row is added with objectClass set to groupOfNames and attribute set to member, SPS will treat the user as a member of all groups where the group is a groupOfNames, and the group’s member attribute contains the user’s dn.


    There is no additional restriction on the group’s objectClass in this case.

  • The user lists the group’s dn. That is, the user’s memberof_user_attribute contains the dn of the group, and the objectClass of the referred group is group.

    This check is performed only when the memberof_check option is enabled for AD.


    SPS compares the dn stored in the memberof_user_attribute to the dn of the group object itself in a strict stringwise manner. Therefore, this user attribute must contain the group DN exactly as it would be returned by the LDAP server. No case or accent differences are allowed.