簡體   English   中英

如何通過ldap中的對象SID搜索用戶

[英]How to search a user by object SID in ldap

當掃描來自Azure AD本地LDAP v3的SID並與之同步時,我們采用這種設計。 作為JWT令牌的一部分返回。 我需要出於授權目的在本地LDAP中找到用戶。 SID以眾所周知的序列化形式出現,該序列由用於初始同步的Microsoft工具支持。 這是LDAP環境:

"java.naming.provider.url" -> "ldap://AD2012.local:389"
 "java.naming.factory.initial" -> "com.sun.jndi.ldap.LdapCtxFactory"
 "com.sun.jndi.ldap.connect.timeout" -> "0"
 "java.naming.security.principal" -> "CN=Administrator,CN=Users,DC=AD2012,DC=local"
 "java.naming.security.authentication" -> "simple"
 "java.naming.security.credentials" -> "Password1"
 "java.naming.referral" -> "follow"

請注意最后一個,因為我認為這很重要。

在測試中,我首先運行搜索以使用以下字符串獲取用戶:

(&(|(objectClass=User)(objectClass=userProxy))(cn=Administrator*))

它工作正常,並且讓我獲得了此用戶的SID,在進行String轉換后,它看起來像

S-1-5-21-1061109567-1712144220-1378238271-319

但是當我構造第二個搜索字符串時:

(&(|(objectClass=User)(objectClass=userProxy))(objectSid=S-1-5-21-1061109567-1712144220-1378238271-319))

搜索結果為空。 但是,有一個線索:使用調試器檢查結果對象將發現它具有以下屬性:

refEx.handleReferrals = 1
refEx.nextReferralEx = LdapReferralException: Continuation Reference ...
refEx.nextReferals.referrals[0] = ldap://DomainDnsZones.AD2012.local/DC=DomainDnsZones,DC=AD2012,DC=local

問題是:為什么服務器在第二個查詢中不遵循引用(通過SID)搜索? 我知道它首先會這樣做,因為如果刪除“關注”環境屬性,搜索將失敗。 任何輸入,不勝感激。

從LDAP使用ObjectSID十分麻煩

ObjectSID是一個二進制值,需要轉換以用於LDAP搜索過濾器

例如,假設您的字符串形式的SID是S-1-5-21-2562418665-3218585558-1813906818-1576。 以二進制形式,這是:

01,05,00,00,00,00,00,05,15,00,00,00,e9,67,bb,98,d6,b7,d7,bf,82,05,1e,6c,28,06,00,00

因此LDAP搜索過濾器為:

(objectSid=\01\05\00\00\00\00\00\05\15\00\00\00\e9\67\bb\98\d6\b7\d7\bf\82\05\1e\6c\28\06\00\00)

暫無
暫無

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

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