2010-09-26 6 views
1

Je me demandais s'il y a un moyen de configurer le plugin LDAP Spring Security pour effectuer l'authentification pas de la manière standard, mais comme suit:Grails/Sécurité Spring LDAP: méthode de contrôle alternatif

If one is able to connect and login to the LDAP server then 
the user is authenticated. 

Read the authorization from this user's account on LDAP 
(this is probably the default behavior) 

Donc, fondamentalement, au lieu d'avoir configuré le compte maître on utilise l'utilisateur/passe transmis par l'utilisateur pour réellement effectuer la connexion (qui si succès permet à l'utilisateur de récupérer les autres données).

Merci d'avance!

Répondre

0

J'espère que vous êtes toujours à la recherche de cela. Ce qu'il semble être un bon pas dans la bonne direction est le BindAuthenticator. Vous devrez toutefois modifier le fichier d'administration pour ne pas utiliser la source de contexte de sécurité. Je crois que le populateur par défaut utilise un pool de connexion avec le compte admin approprié.

Voici un exemple d'installation avec un BindAuthenticator et un AuthoritiesPopulator personnalisé.

 <bean id="authPopulator" class="org.springframework.security.ldap.populator.CustomLdapAuthoritiesPopulator"> 
     <constructor-arg ref="securityContextSource"/> 
     <constructor-arg value="ou=Roles,o=data"/> 
     <property name="groupRoleAttribute" value="resourceGroupType"/> 
     <property name="groupSearchFilter" value="member={0}" /> 
    </bean> 

<bean id="ldap-authentication-provider" 
     class="org.springframework.security.providers.ldap.LdapAuthenticationProvider" > 
    <constructor-arg> 
    <bean class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator"> 
     <constructor-arg ref="securityContextSource"/> 
     <property name="userDnPatterns"> 
     <list><value>cn={0},ou=users,o=system</value> 
      <value>cn={0},ou=users,o=xyz</value> 
      <value>cn={0},ou=users,ou=external,o=xyz</value> 
    </list> 
     </property> 
     <property name="userSearch" ref="userSearch"> 
     </property> 
    </bean> 
    </constructor-arg> 
    <constructor-arg ref="authPopulator"/> 
    <s:custom-authentication-provider /> 
</bean> 

Voici ma source de contexte def:

 <bean id="securityContextSource" 
     class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
    <constructor-arg value="ldap://192.168.254.254:389"/> 
    <property name="userDn" value="cn=admin,ou=users,o=xyz"/> 
    <property name="password" value="password"/> 
</bean> 

j'ai décidé de tester la source de contexte sans nom d'utilisateur ou mot de passe et il semble fonctionner partiellement. Voici ma sortie de journal.

[java] - Authentication success: org.springf[email protected]79107ad5: Principal: or[email protected]3d1a70a7: Username: internalUser; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Password: [PROTECTED]; Authenticated: true; Details: [email protected]: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: a2a3a505521919d529e75c6d14081f6b; Granted Authorities: ROLE_USER 
    [java] - Updated SecurityContextHolder to contain the following Authentication: 'org.springf[email protected]79107ad5: Principal: or[email protected]3d1a70a7: Username: internalUser; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Password: [PROTECTED]; Authenticated: true; Details: [email protected]: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: a2a3a505521919d529e75c6d14081f6b; Granted Authorities: ROLE_USER' 

Je ne reçois aucune erreur, mais il ne remplit pas tous les rôles. Cela peut être un problème d'autorisations eDirectory ou vous devrez peut-être créer votre propre populateur d'autorités. Le populateur reçoit l'utilisateur dirContext.

Questions connexes