2011-09-08 72 views
1

我有一個JNDI連接到LDAP服務器(在這種情況下是Active Directory)。我也ctx.extendedOperation(new StartTlsRequest())獲得一個安全的連接。如何在Java中使用JNDI強制執行LDAP bindRequest?

在此連接上,我需要驗證憑據。我可以登錄使用

ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple"); 
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, principal); 
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, credentials); 

然而,「bindRequest」命令通過LDAP在對JNDI上下文中執行下一個動作才發出。然而我沒有想用它做。我只需要檢查憑據。有沒有辦法強制執行「bindRequest」?

否則,我應該採取什麼行動作爲我自己的NOP?搜索一個不存在的對象,或者我應該查詢一些存在的對象的屬性或...?它需要很快,它不應該在服務器端創建任何工作,它應該儘可能少地使用帶寬。 (因爲實際上的行動不應該擺在首位nessessary ...)

問候, 斯特芬

回答

1

LdapContext.reconnect()執行LDAP綁定。

+0

正是我在找什麼。非常感謝。 –

0

據我瞭解一個解決方案是隻是爲了尋找在目錄中的校長,使得與像一個濾波器進行搜索:

(&(objectCategory=person)(sAMAccountName=principal)) 

如果主要是在如下形式: 「USER1」

(&(objectCategory=person)(userPrincipalName=principal)) 

如果主要是在如下形式:「USER1 @ DOM。 fr「

+0

不是'最好的解決方案'。 – EJP

+0

好的....我刪除最好的... – JPBlanc

0

對於您的非OP​​操作,您可以搜索root DSE。這應該在服務器上的內存中。如果您有權訪問BIND請求和響應,則可以將授權標識請求控件包含在BIND請求中。如果服務器支持此請求控制(在這種情況下,它將列在根DSE中),則服務器將在BIND響應中包含授權身份響應控制。該響應控制將是連接的身份驗證身份。