PowerFlex 3.x Gateway LDAP Authentication Fails when Configured Search Filter Returns an LDAP Group Object
Summary: LDAP queries using the configured LDAP search filter return an LDAP group object.
Symptoms
LDAP-based PowerFlex Gateway authentication fails.
Messages similar to the following appear in the Gateway's log file, scaleio-trace.log.
Note that the o.s.ldap.core.LdapTemplate - Authentication failed message shows the DN of an LDAP group, cn=pf_im_users,ou=Groups,dc=example,dc=com.
2020-12-17 00:27:14,679 [https-jsse-nio-443-exec-6] DEBUG o.s.l.c.s.AbstractContextSource - Trying provider Urls: ldaps://10.0.0.10/ou=Groups,dc=example,dc=com
2020-12-17 00:27:14,679 [https-jsse-nio-443-exec-6] DEBUG c.e.s.s.w.s.ScaleIOSecurityUtils - ldapFilter: '(&(objectClass=posixGroup)(memberUid=smitheea)(cn=pf_im_users))'
2020-12-17 00:27:14,680 [https-jsse-nio-443-exec-6] DEBUG o.s.l.c.s.AbstractContextSource - Got Ldap context on server 'ldaps://10.0.0.10/ou=Groups,dc=example,dc=com'
2020-12-17 00:27:14,687 [https-jsse-nio-443-exec-6] INFO o.s.ldap.core.LdapTemplate - Authentication failed for entry with DN 'cn=pf_im_users,ou=Groups,dc=example,dc=com'
org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:182) ~[spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:285) ~[spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.ldap.core.support.AbstractContextSource.doGetContext(AbstractContextSource.java:119) ~[spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.ldap.core.support.AbstractContextSource.getContext(AbstractContextSource.java:110) ~[spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1494) [spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1385) [spring-ldap-core-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at com.emc.s3g.scaleio.web.security.ScaleIOSecurityUtils.authenticateUsingLdapServer(ScaleIOSecurityUtils.java:398) [classes/:na]
at com.emc.s3g.scaleio.web.security.ScaleIOSecurityUtils.authentication(ScaleIOSecurityUtils.java:165) [classes/:na]
at com.emc.s3g.scaleio.web.security.LocalAuthenticationProvider.authenticate(LocalAuthenticationProvider.java:27) [classes/:na]
(...)
Caused by: javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source) ~[na:1.8.0_121]
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) ~[na:1.8.0_121]
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source) ~[na:1.8.0_121]
(...)
2020-12-17 00:27:14,687 [https-jsse-nio-443-exec-6] ERROR c.e.s.s.w.s.ScaleIOSecurityUtils - User smitheea was not found in group pf_im_users
2020-12-17 00:27:14,687 [https-jsse-nio-443-exec-6] ERROR c.e.s.s.w.s.ScaleIOSecurityUtils - LDAP authentication failed - LDAP filter was '(&(objectClass=posixGroup)(memberUid=smitheea)(cn=pf_im_users))'
2020-12-17 00:27:14,687 [https-jsse-nio-443-exec-6] DEBUG o.s.s.w.a.UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Access denied. Check the LDAP configuration.
Scenario
LDAP queries using the configured LDAP search filter return an LDAP group object.
Impact
LDAP-based Gateway authentication fails.
Cause
During login attempts, the Gateway constructs an LDAP search filter using the configured search filter pattern, configured group name, and the username specified during the login attempt.
The Gateway then queries the LDAP server using the constructed search filter.
The DN of the object returned by the query is used for authentication along with the password specified during the login attempt.
If the LDAP object returned by the filter is not the user object for which the password was provided, login fails.
Resolution
Configure Gateway LDAP authentication using a filter that returns a user object.
It may be necessary to add a group membership attribute to LDAP user objects if one does not already exist. Common group membership attributes are memberOf and isMemberOf.
If the LDAP schema cannot accommodate a group membership attribute for user objects, use non-LDAP-based (local) Gateway authentication.
Impacted Versions
PowerFlex Gateway 3.x
Fixed in Version
TBD