【问题标题】:How to Map AD Groups to User Role Spring Security LDAP如何将 AD 组映射到用户角色 Spring Security LDAP
【发布时间】:2015-03-04 02:48:24
【问题描述】:

我有一个使用 Java Spring MVC 构建的 Web 应用程序。

我只是设置连接到 LDAP 服务器进行身份验证的 Spring Security。

我已成功设置,以便能够登录到我的应用程序,但我找不到任何可以帮助我将 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 以便用户可以看到整个 Web 应用程序。

我似乎只能找到组是 ADMIN 或 USER 的非常简单的示例,在这种情况下前缀 ROLE 只是添加到组中,或者其他方法似乎正在使用 UserDetailContextMapper 但我找不到明确的用途这个。

【问题讨论】:

    标签: java spring spring-security ldap mapping


    【解决方案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 服务器的结构与平时不同,该类比平时稍微复杂一点,因为用户有权访问的组存储在用户下的属性中,而不是反过来,一个组将拥有属于它的所有用户作为属性。

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2021-08-03
      • 2021-07-25
      • 2017-07-27
      • 2020-03-16
      • 2019-05-07
      相关资源
      最近更新 更多