2013-07-12 50 views
1

我有以下問題:驗證窗口用戶是否對LDAP

我的桌面計算機上運行着一個富客戶端(Java),它與服務器通信。當您啓動富客戶端時,它會提示輸入您的用戶名和密碼。富客戶端會將其發送到服務器,該服務器會顯示「是,允許訪問」或「無訪問權限」。

現在我們想要提供更多的用戶體驗:當用戶登錄到Windows並啓動富客戶端時,富客戶端應該自動檢查當前用戶並詢問LDAP(Active Directory)是否這樣用戶是否被允許。

我完全新的LDAP,但我想通了,到目前爲止以下:

我可以得到當前用戶:

userName = new com.sun.security.auth.module.NTSystem().getName(); 

我能得到它的使用華夫這樣的領域:

WindowsAuthProviderImpl auth = new WindowsAuthProviderImpl(); 

for(IWindowsDomain domain : auth.getDomains()) 
    userDomain = domain.getFqn(); 

現在我可以採取一些已知的LDAP帳戶來查找這個特定的用戶:

Hashtable<String, String> props = new Hashtable<String, String>(); 
props.put(Context.SECURITY_PRINCIPAL, "admin"); 
props.put(Context.SECURITY_CREDENTIALS, "123"); 

DirContext context = LdapCtxFactory.getLdapCtxInstance("ldap://host:12345/", props); 
String filter = "(& (userPrincipalName=" + userName + "@" + userDomain + ")(objectClass=user))"; 

SearchControls controls = new SearchControls(); 
controls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

context.search(dc, filter, controls); 

最後,我得到了關於我想要的用戶的信息。但是:

  1. 是否保存?或者有人可以輕易地僞造它的用戶名和域名?
  2. 我想擺脫「管理員」用戶連接到LDAP服務器。我想帶走當前用戶並嘗試與它連接。但是如何?要連接到LDAP服務器,我需要一個密碼,Windows會 - 當然 - 不會給我。

那麼,我該如何驗證/檢查Windows中的當前登錄用戶對LDAP?

我到目前爲止所做的工作似乎很複雜,感覺不對。我覺得我沒有得到一點...

編輯:

我知道我還可以得到當前用戶的組從華夫這樣的:

WindowsAuthProviderImpl auth = new WindowsAuthProviderImpl(); 
IWindowsIdentity identity = auth.logonUser(user, pwd); 
for(IWindowsAccount group : identity.getGroups()) 
    group.getFqn(); 

然而,雖然我已經在Windows上登錄,但我仍然需要密碼...

回答

1

AFIK,沒有辦法從Microsoft Active Directory獲取密碼。

你不明白爲什麼你需要用戶的密碼,但你也許可以使用Kerberos Ticket。

-jim

相關問題