Я использую аутентификацию с использованием ldap. Если предоставленный идентификатор пользователя и пароль существуют в ldap, я смог получить логин пользователя. Я хотел бы ограничить это на основе атрибута memberOf пользователя в LDAP. Если у пользователя есть атрибут memberOf с определенным значением CN (CN = adminaccess или CN = superadminaccess), тогда аутентификация/авторизация должны пройти. Ошибка аутентификации/авторизации должна завершиться неудачей.Аутентификация подлинности с использованием ldap на основе атрибута memberOf
<security:http auto-config="true" use-expressions="true" access-denied-page="/admin/auth/denied">
<security:intercept-url pattern="/admin/auth/login" access="permitAll" />
<security:intercept-url pattern="/admin/dashboard/*" access="hasAnyRole('ROLE_ADMINACCESS','ROLE_SUPERADMINACCESS')"/>
</security:http>
<security:authentication-manager>
<security:ldap-authentication-provider user-dn-pattern="CN={0},CN=Users" group-search-base="CN=adminaccess,CN=Users" />
</security:authentication-manager>
<bean id="ldapContext"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://xxx.ds.yyy.com:389/DC=xxx,DC=ds,DC=yyy,DC=com"/>
<property name="userDn" value="CN=aaa,CN=Users,DC=xxx,DC=ds,DC=yyy,DC=com"/>
<property name="password" value="thepassword"/>
</bean>
Я всегда перехожу на страницу «Отказано в доступе» с моей вышеуказанной конфигурацией. Если я удалю access = "hasAnyRole ('ROLE_ADMINACCESS', 'ROLE_SUPERADMINACCESS')" из security: intercept-url, я могу всегда иметь доступ с допустимым пользователем/паролем, даже если пользователь не является частью adminaccess (который Я надеялся, что это будет ограничено, потому что моя группа поиска-поиска указала CN = adminaccess). Хотите знать, что конфигурация должна быть:
- Чтобы ограничить доступ к только пользователям, которые memberOf CN = adminaccess и/или CN = superadminaccess
- Укажите правильную групповую поисковую базу. Если я укажу только CN = Пользователи, я получаю тайм-аут, поскольку это происходит против нашего корпоративного ldap. Когда я искал пользователей в браузере LDAP, я не мог найти «ou», который мог бы помочь. С моей вышеупомянутой конфигурационной группой-search-base = «CN = adminaccess, CN = Users», я не получаю таймаут, но я не думаю, что это правильно.
Я ** не уверен **, что 'group-search-base' релевантно для * членства в группе * (т. атрибут 'memberOf' находится в записи учетной записи). –
Спасибо, Пол. Удивление, если есть какой-либо другой способ, я мог бы ограничить мой поиск на основе членства в группе. Я в порядке, даже если аутентификация завершается с ошибкой (а не только авторизацией) для пользователей, не входящих в эти группы. – ignatan
Возможно, можно использовать учетные данные пользователя для выполнения поиска LDAP для собственной учетной записи. Затем вы можете использовать фильтр LDAP, чтобы включить только учетные записи с определенным атрибутом memberOf. Однако для этого может потребоваться конфигурация ldap с пружинной безопасностью (т. Е. Без поддержки пространства имен). –