簡體   English   中英

如何將AD組映射到用戶角色Spring Security LDAP

[英]How to Map AD Groups to User Role Spring Security LDAP

我有一個使用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但我無法清楚地使用它。

為此,我在身份驗證管理器中使用了以下內容:

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服務器具有與通常不同的結構,因為用戶可以訪問的組存儲在用戶下的屬性中而不是相反的方式,因此該類比平時稍微復雜一些。其中一個組將屬於它的所有用戶作為屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM