2013-04-15 48 views
1

我創建一個Java應用程序,能夠登錄到與OpenDJ客戶端SDK的LDAP服務器,但我只有域名用戶名(也稱爲SAM帳戶名)和密碼。如果你不知道域名登錄,看到這個圖片:如何將域名轉換爲LDAP中的專有名稱(DN)?

enter image description here

您的格式輸入用戶名域:DOMAIN_NAME \用戶名,而不是隻是普通USER_NAME。域名示例是:corp.fabrikam.com。


現在我需要知道如何將域名轉換爲可分辨名稱(DN)?因爲OpenDJ需要可分辨名稱來連接到LDAP。

例如:從corp.fabrikam.com的可分辨名稱是:dc = corp,dc = fabrikam,dc = com。

看來我只需要通過拆分它,但我聽說有一個叫脫節域名的事「」:
http://technet.microsoft.com/en-us/library/cc731125%28v=ws.10%29.aspx

因此分裂伎倆可能並不可靠這裏。

另外,LDAP中的用戶可以位於組織單位(OU)的之下。比方說,用戶約翰是屬於經理 OU,所以完整的用戶john的DN會變成這個樣子:

UID =約翰,OU =經理,DC =公司,DC = Fabrikam的,DC = com的

回答

2

您應該始終引用ldap服務器的RootDSE條目以獲取有關您要連接到的環境的信息。任何人都可以通過匿名綁定(或特定用戶,只要綁定,這並不重要)訪問RootDSE條目。它包含了很多有趣的東西,你正在尋找的是defaultNamingContext。

綁定後,對空字符串的DN執行ldap讀取操作:''。如果您選擇的框架提供了一些API來讀取rootDSE,請嘗試使用它。它可能更簡單。

這可能會幫助你得到一個kickstart: http://opendj.forgerock.org/opendj-ldap-sdk/apidocs/index.html 我沒有找到defaultNamingContext對opendj文檔頁面的任何提及,但你可能只得到你正在尋找的信息通過getNamingContexts()方法。

請注意,rootDSE是ldap功能,它不是實現特定的。

+0

嗨,謝謝。我在文檔中找到它。但是我還有一個問題,在LDAP中登錄USER_NAME的等效屬性是什麼?它是** uid **還是** cn **?我發現uid不是唯一的,但cn是。因此,如果我在LDAP中有兩個具有相同uid的條目,則會遇到連接到正確條目的麻煩。 – null

+1

這是特定於實現的。對於Active Directory,登錄名是** samaccountname **(即jsmith),或者也可以是域名部分** userprincipalname **(即[email protected])。 PS。 CN atrtribute不必是全局唯一的 - 它只需對於相關部分或路徑是唯一的(簡單地說,RDN(它是objectclass = user的CN屬性)必須對它駐留的給定容器是唯一的)。 –

+0

你說得對,cn並不是獨一無二的。那麼OpenDJ LDAP中的登錄名怎麼樣?我找不到任何有關它的信息。這是否意味着我們可以自由決定? – null

相關問題