[SPRING] Spring LdapAuthentication 및 로컬 데이터베이스에서 롤로드
SPRINGSpring LdapAuthentication 및 로컬 데이터베이스에서 롤로드
나는 봄 보안을 LDAP 서버에 대해 인증하도록 구성했다.
<security:authentication-manager >
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
</security:authentication-manager>
인증 후 동일한 사용자의 로컬 데이터베이스에서 역할을로드하려고합니다. "ldap-authentication-provider"를 사용하여 로컬 데이터베이스 역할을로드하려면 어떻게해야합니까?
두 번째 인증 공급자를 아래와 같이 추가하면
<security:authentication-manager >
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
<security:authentication-provider ref="daoAuthenticationProvider" />
</security:authentication-manager>
daoAuthenticationProvider가 추가되었지만 Spring은 첫 번째 인증 제공자가 사용자를 인증 할 때 두 번째 제공자를 사용하지 않습니다. 첫 번째 인증 공급자가 인증에 실패하면 목록에서 다음으로 이동합니다.
기본적으로 사용자 정의해야하는 것처럼 보입니다.
<security:ldap-authentication-provider user-dn-pattern="uid={0}" />
로컬 데이터베이스에서 ROLE을로드합니다.
어떤 제안? 이것이 어떻게 구현되어야 하는가?
해결법
-
==============================
1.인증 공급자는 성공한 인증에 대해 완전히 채워진 인증 토큰을 제공해야하므로 하나의 공급자를 사용하여 사용자의 자격 증명을 검사하고 또 다른 공급자를 사용하여 권한 (역할)을 할당 할 수 없습니다.
인증 공급자는 성공한 인증에 대해 완전히 채워진 인증 토큰을 제공해야하므로 하나의 공급자를 사용하여 사용자의 자격 증명을 검사하고 또 다른 공급자를 사용하여 권한 (역할)을 할당 할 수 없습니다.
그러나 ldap 인증 공급자를 사용자 정의하여 기본 동작 (ldap에서 사용자 그룹 검색) 대신 데이터베이스에서 사용자 역할을 가져올 수 있습니다. LdapAuthenticationProvider에는 두 가지 전략, 즉 인증 자체를 수행하는 전략 (LdapAuthenticator)과 사용자 권한 (LdapAuthoritiesPopulator)을 가져 오는 전략이 주입됩니다. 데이터베이스에서 역할을로드하는 LdapAuthoritiesPopulator 구현을 제공하면 요구 사항을 충족시킬 수 있습니다. 이미 데이터베이스에 대해 UserDetailsService가 작동하고있는 경우 UserDetailsServiceLdapAuthoritiesPopulator에 래핑하여 LdapAuthenticationProvider에 삽입하여 쉽게 통합 할 수 있습니다.
이 구성은 드문 경우이기 때문에 보안 XML 네임 스페이스는 태그 / 속성을 설정하지 않지만 원시 bean 구성은 너무 복잡하지 않습니다. 다음은 개요입니다.
1) 당신은 어딘가에 당신의 설정에 ldap-server가 있다고 가정합니다. id와 id를 지정하는 것이 중요합니다. 그러면 나중에 참조 할 수 있습니다.
<security:ldap-server url="..." id="ldapServer" .../>
2) 인증 관리자 섹션에서 사용자 정의 된 제공자 만 참조합니다.
<security:authentication-manager> <security:authentication-provider ref="customLdapAuthProvider"/> </security:authentication-manager>
3) 이제 필수적인 부분 :
<bean id="customLdapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> <constructor-arg name="authenticator"> <bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> <constructor-arg name="contextSource" ref="ldapServer"/> <property name="userDnPatterns"> <list> <value>uid={0}</value> </list> </property> </bean> </constructor-arg> <constructor-arg name="authoritiesPopulator"> <bean class="org.springframework.security.ldap.authentication.UserDetailsServiceLdapAuthoritiesPopulator"> <constructor-arg name="userService" ref="userService"/> </bean> </constructor-arg> </bean>
인증자는 기본적으로 네임 스페이스 구성에 의해 생성되는 인증 자와 동일합니다. (ldap 서버를 참조하는 contextSource 속성에주의하십시오.)
authoritiesPopulator는 사용자의 구성에 어딘가에 정의되어 있어야하는 userService 구현을 둘러싼 간단한 래퍼입니다.
from https://stackoverflow.com/questions/16469314/spring-ldapauthentication-and-load-roles-from-local-database by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 데이터베이스의 Spring 설정 (0) | 2019.03.31 |
---|---|
[SPRING] @Document가있는 몽고 멀티 입주 (0) | 2019.03.31 |
[SPRING] entityManager를 사용하여 JPA에서 트랜잭션을 시작하는 방법 (0) | 2019.03.31 |
[SPRING] Spring에서는 autowired bean 내부에서 새로운 bean을 autowire 할 수 있습니까? (0) | 2019.03.31 |
[SPRING] JPA에서 사용자 정의 ID 생성 방법 (0) | 2019.03.31 |