setsearchfilter example code activedirectoryldapauthenticationprovider active java spring spring-security active-directory ldap

java - activedirectoryldapauthenticationprovider - spring security ldap authentication example code



La autenticación de seguridad de primavera con el directorio activo falló (1)

Primero trataría de cambiar:

uid={0},ou=users

a

cn={0},ou=users

Normalmente, uid no es un valor dentro de Microsoft Active Directory.

Sin embargo, el error:

data 52e

Devuelve AFIK, cuando el nombre de usuario es válido pero la contraseña / credencial no es válida.

Finalmente, de lo publicado se desprende que

m.fazel

Es el samAccountName y no el cn o el usuario del usuario. El LDAP DN que se utiliza para el enlace parece ser:

uid=m.fazel,ou=users,dc=myDomain,dc=org

¿Este usuario aparece en el directorio?

-jim

He estado trabajando en un proyecto de aplicación web de primavera en nuestra empresa. Solía ​​autenticar a los usuarios que usaban la base de datos, pero recientemente decidimos usar nuestro servidor de directorio activo como medio de autenticación. Entonces, cambiamos el spring-security.xml al siguiente código:

<http auto-config="true" entry-point-ref="loginUrlAuthenticationEntryPoint"> <intercept-url pattern="/Content/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <intercept-url pattern="/Desktop/New_Them/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <intercept-url pattern="/App/Index" access="ROLE_USER" /> <intercept-url pattern="/App/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <intercept-url pattern="/rest/clc/ClcLogPhon/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <intercept-url pattern="/**" access="ROLE_USER" /> <custom-filter ref="concurrencyFilter" position="CONCURRENT_SESSION_FILTER" /> <logout logout-success-url="/App/Login" /> <remember-me key="myAppKey" /> <session-management session-authentication-strategy-ref="sas"> </session-management> <csrf /> <headers> <xss-protection /> </headers> </http> <beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> <beans:constructor-arg value="ldap://192.168.1.199:389/DC=myDomain,DC=org" /> <beans:property name="userDn" value="CN=myUsername,CN=Users,DC=myDomain,DC=org" /> <beans:property name="password" value="myPassword" /> </beans:bean> <beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="contextSource" /> <beans:property name="userDnPatterns"> <beans:list> <beans:value>uid={0},ou=users</beans:value> </beans:list> </beans:property> </beans:bean> </beans:constructor-arg> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> <beans:constructor-arg ref="contextSource" /> <beans:constructor-arg value="ou=groups" /> <beans:property name="groupRoleAttribute" value="ou" /> </beans:bean> </beans:constructor-arg> </beans:bean> <authentication-manager> <authentication-provider ref="ldapAuthProvider"/> </authentication-manager>

Y la aplicación web se inicia bien. Pero cuando quiero iniciar sesión con los usuarios que declararon antes en el directorio activo, se produce el siguiente error:

DEBUG UsernamePasswordAuthenticationFilter - Request is to process authentication DEBUG ProviderManager - Authentication attempt using org.springframework.security.ldap.authentication.LdapAuthenticationProvider DEBUG LdapAuthenticationProvider - Processing authentication request for user: m.fazel DEBUG BindAuthenticator - Attempting to bind as uid=m.fazel,ou=users,dc=myDomain,dc=org DEBUG DefaultSpringSecurityContextSource - Removing pooling flag for user uid=m.fazel,ou=users,dc=myDomain,dc=org DEBUG BindAuthenticator - Failed to bind as uid=m.fazel,ou=users: org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1]; DEBUG DefaultListableBeanFactory - Returning cached instance of singleton bean ''sessionRegistry'' DEBUG DefaultListableBeanFactory - Returning cached instance of singleton bean ''logoutSuccessHandler'' DEBUG UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials DEBUG UsernamePasswordAuthenticationFilter - Updated SecurityContextHolder to contain null Authentication DEBUG UsernamePasswordAuthenticationFilter - Delegating to authentication failure handler org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler@560d9ba6 DEBUG TokenBasedRememberMeServices - Interactive login attempt was unsuccessful. DEBUG TokenBasedRememberMeServices - Cancelling cookie DEBUG SimpleUrlAuthenticationFailureHandler - Redirecting to /spring_security_login?login_error DEBUG DefaultRedirectStrategy - Redirecting to ''/hafizApps/spring_security_login?login_error''

Como puede ver el resultado de depuración anterior, causó debido a un error de Ldap:

LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1

Sin embargo, ya me he conectado al servidor con JXplorer . No hay ningún error alternativo en la configuración de conexión ldap. Y también el usuario de prueba con el que intento conectarme (iemfazel) ya está declarado en ldap como puede ver en la figura siguiente:

Después de editar @jeemster:

Sin embargo, uid era exactamente lo que estaba escrito en la autenticación de primavera ldap de seguridad . Cambié el spring-security.xml como lo dijo jeemster y puse cn = {0}, ou = prueba en lugar de uid = {0}, ou = usuarios. El bean con id = "ldapAuthProvider" se cambia al bean que se muestra a continuación:

<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <beans:constructor-arg ref="contextSource" /> <beans:property name="userDnPatterns"> <beans:list> <beans:value>CN={0},OU=test</beans:value> </beans:list> </beans:property> </beans:bean> </beans:constructor-arg> <beans:constructor-arg> <beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> <beans:constructor-arg ref="contextSource" /> <beans:constructor-arg value="ou=groups" /> <beans:property name="groupRoleAttribute" value="ou" /> </beans:bean> </beans:constructor-arg> </beans:bean>

Además, creo un nuevo usuario en el grupo de prueba y lo llamo alialavi. El nuevo usuario que se creó en el ldap se muestra en la figura a continuación.

Como se demuestra en la figura anterior que captura de JXplorer, el nombre distinguido para el nuevo usuario es:

cn=alialavi,ou=test,dc=hafiz-co,dc=org

Pero después de que se inicia la aplicación web, veo este error nuevamente en la página de inicio de sesión:

DEBUG UsernamePasswordAuthenticationFilter - Request is to process authentication DEBUG ProviderManager - Authentication attempt using org.springframework.security.ldap.authentication.LdapAuthenticationProvider DEBUG LdapAuthenticationProvider - Processing authentication request for user: alialavi DEBUG BindAuthenticator - Attempting to bind as cn=alialavi,ou=test,dc=hafiz-co,dc=org DEBUG DefaultSpringSecurityContextSource - Removing pooling flag for user cn=alialavi,ou=test,dc=hafiz-co,dc=org DEBUG BindAuthenticator - Failed to bind as CN=alialavi,OU=test: org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1] DEBUG UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials DEBUG UsernamePasswordAuthenticationFilter - Updated SecurityContextHolder to contain null Authentication DEBUG UsernamePasswordAuthenticationFilter - Delegating to authentication failure handler org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler@4481f947 DEBUG TokenBasedRememberMeServices - Interactive login attempt was unsuccessful.

De nuevo causó error con el nuevo distinguishedName:

cn=alialavi,ou=test,dc=hafiz-co,dc=org

Aunque ambos distinguishedName es el mismo, se produjo el error.