복붙노트

[SPRING] AD 그룹을 사용자 역할 스프링 보안 LDAP에 매핑하는 방법

SPRING

AD 그룹을 사용자 역할 스프링 보안 LDAP에 매핑하는 방법

Java Spring MVC를 사용하여 웹 애플리케이션을 구축했습니다.

나는 단지 인증을 위해 LDAP 서버에 연결하는 스프링 보안을 설정하고있다.

성공적으로 설정하여 응용 프로그램에 로그인 할 수 있지만 AD 그룹을 Java 내 사용자 역할에 매핑하는 데 도움이되는 항목을 찾을 수 없습니다. 예를 들어 403 페이지는 금지 된 페이지 만 얻을 수 있습니다. 인증되었지만 아직 사용 권한이 없습니다.

나는 현재 :

<http auto-config="true">
    <intercept-url pattern="/**" access="ROLE_USER" />      
</http>

<ldap-server id="ldapServer" url="LDAPURL" manager-dn="USER" manager-password="PASSWORD"  />

<authentication-manager > 
    <ldap-authentication-provider           
        group-search-base="OU=GROUPS"
        group-search-filter="sAMAccountName={0}"

        user-search-base="OU=USERS"
        user-search-filter="sAMAccountName={0}" 

        />
</authentication-manager>

해당 사용자가 AD 그룹 g-group-UK-user의 일부 였다고 가정합니다. 그런 다음 AD 그룹을 ROLE_USER에 매핑하여 사용자가 전체 웹 앱을 볼 수있게하려고합니다.

그룹이 ADMIN이거나 USER 인 경우 매우 단순한 예제를 찾는 것처럼 보일 수 있습니다.이 경우 ROLE 접두어가 그룹에 추가되었거나 다른 메서드가 UserDetailContextMapper를 사용하고있는 것 같지만이 점을 명확하게 사용할 수 없습니다.

해결법

  1. ==============================

    1.이렇게하려면 인증 관리자에서 다음을 사용했습니다.

    이렇게하려면 인증 관리자에서 다음을 사용했습니다.

    user-context-mapper-ref="customUserContextMapper"
    

    그런 다음 다음 클래스를 사용하여 해당 사용자가 특정 AD 그룹에 속하는지 확인한 다음 ROLE_USER 역할을 권한에 할당합니다.

    @Override
    public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) 
    {
    
        Attributes attributes = ctx.getAttributes();
        Object[] groups = new Object[100];
        groups = ctx.getObjectAttributes("memberOf");
    
        LOGGER.debug("Attributes: {}", attributes);
    
        Set<GrantedAuthority> authority = new HashSet<GrantedAuthority>();
    
        for(Object group: groups)
        {
    
            if (group.toString().toLowerCase().contains("AD_GROUP_NAME".toLowerCase()) == true)
            {
                authority.add(new SimpleGrantedAuthority("ROLE_USER"));
                break;          
            }
        }
    
        User userDetails = new User(username, "", false, false, false, false, authority);
        return userDetails;
    }
    

    클래스는 사용자가 액세스 할 수있는 그룹이 사용자의 속성에 저장되고 다른 방식으로는 저장되지 않는다는 점에서 평소와 다른 구조를 가진 연결하는 LDAP 서버 때문에 평소보다 조금 복잡합니다. 어떤 그룹이 그 그룹에 속한 모든 사용자를 속성으로 가질 수 있습니다.

  2. from https://stackoverflow.com/questions/27798607/how-to-map-ad-groups-to-user-role-spring-security-ldap by cc-by-sa and MIT license