亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在域用戶安全組內的 Microsoft AD 中查找用戶的組成員

在域用戶安全組內的 Microsoft AD 中查找用戶的組成員

POPMUISE 2023-10-12 17:01:31
我需要在域用戶組內使用 java 查找 Microsoft Active Directory 中給定用戶的組成員。我的廣告結構如下。reg1.subdomain.domain.com - 用戶(類型 - 容器) - 域用戶(類型 - 安全組全局)我寫了下面的代碼。但我無法查詢域用戶組內的用戶。public static String ldapUri = "ldap://ldapuri.com:389";    public static String usersContainer = "CN=users,DC=reg1,DC=subdomain,DC=domain,DC=com";    public ArrayList<String> getUserGroups(String username, String password){        Hashtable env = new Hashtable();        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");        env.put(Context.PROVIDER_URL, ldapUri);        env.put(Context.SECURITY_PRINCIPAL, username);        env.put(Context.SECURITY_CREDENTIALS, password);        try {            DirContext ctx = new InitialDirContext(env);            SearchControls ctls = new SearchControls();            String[] attrIDs = { "memberOf" };            ctls.setReturningAttributes(attrIDs);            ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);            NamingEnumeration answer = ctx.search(usersContainer, "(&(objectCategory=group)(cn=Domain Users)(sAMAccountName=username))", ctls);            while (answer.hasMore()) {                SearchResult rslt = (SearchResult) answer.next();                Attributes attrs = rslt.getAttributes();                try{                    String groups = attrs.get("memberOf").toString();                    String [] groupname = groups.split(":");                    System.out.println(groupname[1]);                }catch (Exception e){                    System.out.println("no members");                }            }            ctx.close();        } catch (NamingException e) {            e.printStackTrace();        }        return list;    }有人可以指出我添加的過濾器查詢有什么問題嗎?
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

域用戶組是一個全局組安全組,默認情況下包括域中的所有用戶帳戶。當您在域中創建用戶帳戶時,默認情況下會將其添加到該組中。

大多數方法不會揭示“主要”組的成員身份。對于大多數用戶來說,“主要”組是“域用戶”。具體來說,用戶對象的memberOf 屬性和組對象的member 屬性永遠不會顯示“主要”組成員資格。在大多數域中,“Domain Users”組的成員屬性為空,可以安全地假設所有用戶都屬于該組。

域用戶 LDAP 查詢示例 對于將“域用戶”指定為“主要”的所有用戶,搜索 PrimaryGroupID 屬性為 513(默認情況下)的所有用戶?!坝蛴脩簟苯M的 PrimaryGroupID 屬性是相同的整數 513。LDAP 語法 LDAP SearchFilter 可以是:

(primaryGroupID=513)

假設您沒有更改默認值,也沒有創建任何primaryGroupID 不是 513 的用戶。

對于“域用戶”組中的用戶,只需使用 (primaryGroupID=513) 和用戶所在的基本DN(默認情況下 CN=Users),這將返回用戶的 DN。

然后,要獲取這些用戶屬于 membeOf 的所有組,您需要在另一個查詢中使用 DN 來循環結果,類似于:

(member:1.2.840.113556.1.4.1941:=(CN=UserName,CN=Users,DC=YOURDOMAIN,DC=NET))

如圖所示,用戶所屬的所有組,包括嵌套組

哦,通常情況下,CN=Users 中的用戶通常也與偽組“域用戶”中的成員相同。


查看完整回答
反對 回復 2023-10-12
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

假設底座usersContainer設置正確,您只需按如下方式更改過濾器:

  • 搜索用戶條目時,您需要修復objectCategory以過濾用戶 - 而不是組。您還可以使用類似的等效項objectClass=inetOrgPerson。

  • 除非您正在搜索的用戶條目實際上確實具有該屬性(作為用戶的常用名cn=Domain Users不太可能),否則您不需要這部分。

所以以下內容應該足夠了:

ctx.search(usersContainer, "(&(objectCategory=person)(sAMAccountName=username))", ctls);

要匹配特定的用戶組成員身份,您只需在memberOf屬性上添加過濾器(僅當用戶是給定組的成員時才返回匹配的用戶條目),例如。:

(&(objectCategory=person)(sAMAccountName=username)(memberOf=<groupDN>))

請注意,@jwilleke 指出,如果您的目標是不維護成員資格屬性的特殊組 (group:member/user:memberOf),則需要使用primaryGroupID而不是memberOf.

也就是說,由于sAMAccountName在域內的所有安全主體對象中是唯一的,因此您可能只需要使用以下內容而不是添加過濾器UserPrincipalName

(&(objectCategory=person)([email protected]))


查看完整回答
反對 回復 2023-10-12
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

除了我指定的搜索方法之外,上面給定的代碼片段是正確的。我無法從用戶容器中搜索域用戶組內的用戶,因為我沒有提到在子目錄中搜索。通過添加搜索范圍,

ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);

它能夠成功檢索用戶


查看完整回答
反對 回復 2023-10-12
  • 3 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號