Grails / Spring Security LDAP: альтернативный метод проверки - PullRequest
1 голос
/ 27 сентября 2010

Мне было интересно, есть ли способ настроить подключаемый модуль Spring Security LDAP для выполнения проверки подлинности не стандартным способом, а следующим образом:

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)

Таким образом, вместо настройки основной учетной записииспользует user / pass, переданный пользователем, чтобы фактически выполнить вход в систему (который, если успешно, позволяет пользователю получать другие данные).

Заранее спасибо!

1 Ответ

0 голосов
/ 03 ноября 2010

Надеюсь, ты все еще ищешь это.То, на что это похоже, является хорошим шагом в правильном направлении, это BindAuthenticator.Вы должны изменить популатор прав доступа, чтобы не использовать источник контекста безопасности.Я полагаю, что популатор по умолчанию использует пул подключений с соответствующей учетной записью администратора.

Вот пример установки с BindAuthenticator и пользовательским AuthoritiesPopulator.

        <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>

Вот мой источник контекста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>

Я решил проверить источник контекста без имени пользователя и пароля, и он, кажется, работает частично.Вот мой вывод журнала.

 [java] - Authentication success: org.springframework.security.providers.UsernamePasswordAuthenticationToken@79107ad5: Principal: org.springframework.security.userdetails.ldap.LdapUserDetailsImpl@3d1a70a7: Username: internalUser; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@0: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: a2a3a505521919d529e75c6d14081f6b; Granted Authorities: ROLE_USER
     [java] - Updated SecurityContextHolder to contain the following Authentication: 'org.springframework.security.providers.UsernamePasswordAuthenticationToken@79107ad5: Principal: org.springframework.security.userdetails.ldap.LdapUserDetailsImpl@3d1a70a7: Username: internalUser; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.ui.WebAuthenticationDetails@0: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: a2a3a505521919d529e75c6d14081f6b; Granted Authorities: ROLE_USER'

Я не получаю никаких ошибок, но он не заполняет все роли.Это может быть проблема с разрешениями eDirectory, или вам, возможно, придется создать свой собственный модуль авторизации.Популятору передается пользователь dirContext.

...