diff --git a/mintlify/administration/sso/ldap.mdx b/mintlify/administration/sso/ldap.mdx index 541f19f3..66ad507e 100644 --- a/mintlify/administration/sso/ldap.mdx +++ b/mintlify/administration/sso/ldap.mdx @@ -19,7 +19,7 @@ Identity provider information: - **Bind DN**: the Distinguished Name (DN) of the user to bind as a service account to perform search requests (e.g. `uid=system,ou=Users,dc=jumpcloud,dc=com`) - **Bind Password**: the password of the user to bind as a service account - **Base DN**: the base Distinguished Name (DN) to search for users (e.g. `ou=users,dc=jumpcloud,dc=com`) -- **User Filter**: the filter to search for users (e.g. `(uid=%s)`, where `%s` will be subsituted by the username) +- **User Filter**: the LDAP search filter to match users during authentication. The `%s` placeholder will be replaced with the username entered during login (e.g. `(uid=%s)` searches for a user with matching `uid` attribute) - **Security protocol**: the security protocol to be used for establishing connections with the LDAP server User information field mapping: @@ -28,6 +28,58 @@ User information field mapping: - **Display name**: the attribute to be used as the Bytebase user display name (e.g. `displayName`, optional) - **Phone**: the attribute to be used as the Bytebase user phone number (e.g. `phone`, optional) +## User Filter Configuration + +The **User Filter** field is critical for LDAP authentication. It defines how Bytebase searches for users in your LDAP directory. + +### Understanding the User Filter + +- The `%s` placeholder is **required** and will be replaced with the username entered during login +- Filters must use valid LDAP filter syntax with proper parentheses +- The filter should uniquely identify users to prevent authentication issues + +### Common User Filter Patterns + +Different LDAP providers use different object classes and attributes: + +| Provider | Recommended User Filter | Description | +| ---------------- | ------------------------------------------ | --------------------------------------------------------------- | +| Okta | `(&(objectClass=inetOrgPerson)(uid=%s))` | Matches users with `inetOrgPerson` class and matching `uid` | +| JumpCloud | `(&(objectClass=posixAccount)(uid=%s))` | Matches users with `posixAccount` class and matching `uid` | +| Active Directory | `(&(objectClass=user)(sAMAccountName=%s))` | Matches users with matching `sAMAccountName` (Windows username) | +| OpenLDAP | `(&(objectClass=inetOrgPerson)(uid=%s))` | Standard OpenLDAP user filter | + +### Best Practices + +1. **Use AND conditions**: Combine object class with the user identifier for more precise matching: + + - Good: `(&(objectClass=inetOrgPerson)(uid=%s))` + - Avoid: `(uid=%s)` (too broad, may match non-user entries) + +2. **Match your directory schema**: Verify the object class used in your LDAP directory: + + - Common classes: `inetOrgPerson`, `posixAccount`, `user`, `person` + - Use LDAP browser tools to inspect your directory structure + +3. **Test the filter**: Use the **Test Connection** button to verify your filter works before saving + +### Common Issues + +| Issue Type | Description | Bad Example | Correction | +| -------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------------- | +| **Invalid filter syntax** | Parentheses must be balanced and properly nested following LDAP filter syntax | `&(objectClass=user)(uid=%s)` | `(&(objectClass=user)(uid=%s))` | +| **Missing %s placeholder** | The `%s` placeholder must be present for username substitution | `(uid=username)` | `(uid=%s)` | +| **Wrong attribute name** | Username attribute must match your LDAP schema (common: `uid`, `sAMAccountName`, `cn`, `mail`) | `(&(objectClass=user)(username=%s))` | `(&(objectClass=user)(uid=%s))` | +| **Wrong object class** | Object class must match the user entries in your LDAP directory | `(&(objectClass=person)(uid=%s))` | `(&(objectClass=inetOrgPerson)(uid=%s))` | + + + +If you're unsure about your LDAP schema, use an LDAP browser tool (like Apache Directory Studio or ldapsearch) to inspect a user entry and identify the correct object class and username attribute. + + + +## Examples + ### JumpCloud