Hi Iam new to Spring security,
Моя задача - аутентифицировать пользователя от активного каталога, сопоставляя имя пользователя, полученное из сертификата клиента x509. До сих пор, что я сделал включен SSL взаимная аутентификация x509 аутентификация с активным каталогом с использованием Spring security
Это выше часть работает отлично теперь у меня есть security.xml файл, в котором я настроил все связанные с ссылкой x509 и конфигурации службы каталогов Active Directory
<global-method-security secured-annotations="enabled" />
<http >
<intercept-url pattern="/**" access="ROLE_USER,ROLE_ANONYMOUS" requires- channel="https"/>
<intercept-url pattern="/UserLogin/*" access="ROLE_ADMIN,ROLE_USER" requires-channel="https"/>
<x509 subject-principal-regex="CN=(.*?)," user-service-ref="ldapUserService" />
</http>
<authentication-manager>
<authentication-provider user-service-ref="ldapUserService" />
</authentication-manager>
<bean:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<bean:constructor-arg value="ldap://ActiveDirectoryURL:389/CN=example,DC=net"/>
<bean:property name="userDn" value="[email protected]"/>
<bean:property name="password" value="secuera1SMK"/>
</bean:bean>
<bean:bean name="ldapUserService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService">
<bean:constructor-arg ref="ldapUserSearch"/>
<bean:constructor-arg ref="ldapAuthoritiesPopulator"/>
</bean:bean>
<bean:bean name="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<bean:constructor-arg value=""/>
<bean:constructor-arg value="(&(sAMAccountName={0})(objectclass=Users))"/>
<bean:constructor-arg ref="contextSource" />
</bean:bean>
<bean:bean name="ldapAuthoritiesPopulator"
class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
<bean:constructor-arg ref="contextSource" />
<bean:constructor-arg value="" />
<bean:property name="groupSearchFilter" value="member={0}" />
<bean:property name="searchSubtree" value="true" />
</bean:bean>
Теперь проблема, с которой я столкнулся, - это когда я пытаюсь получить SecurityContextHolder.getContext(). GetAuthentication(). GetPrincipal(); это возвращаемый тип строки, а не UserDetails (подробности сертификат, используемый при входе), выходная строка для getPrincipal() является AnonymousUser и власти это дать, ROLE_ANONYMOUS но когда я называю getAuthentication.isAuthenticated() возвращает истинную. Я использую Tomcat 7, Spring Security 3.1
Что может быть проблема, пожалуйста, помогите мне в этом отношении
Это ожидаемое поведение для пользователя, не прошедшего проверку подлинности. Вы подтвердили, что аутентификация действительно прошла успешно (например, путем изучения журнала отладки)? –
Я включил ведение журнала сейчас, я мог видеть в журнале ** org.springframework.security.core.userdetails.UsernameNotFoundException: Пользователь Mohankumar Kanaka не найден в каталоге ** небольшой подсказку, мой предмет DN в сертификате примерно такой: * * CN = Mohankumar Kanaka, CN = Пользователи, DC = rvalidedc, DC = local **, где, поскольку активный каталог имеет имя входа в качестве **[email protected]**, это проблема? где есть дисплей для учетной записи mkanaka Mohankumar kanaka, я думаю, что это считается во время активного поиска каталогов? Спасибо за помощь Люк. – kanakmohank