我有以下問題:驗證窗口用戶是否對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);
最後,我得到了關於我想要的用戶的信息。但是:
- 是否保存?或者有人可以輕易地僞造它的用戶名和域名?
- 我想擺脫「管理員」用戶連接到LDAP服務器。我想帶走當前用戶並嘗試與它連接。但是如何?要連接到LDAP服務器,我需要一個密碼,Windows會 - 當然 - 不會給我。
那麼,我該如何驗證/檢查Windows中的當前登錄用戶對LDAP?
我到目前爲止所做的工作似乎很複雜,感覺不對。我覺得我沒有得到一點...
編輯:
我知道我還可以得到當前用戶的組從華夫這樣的:
WindowsAuthProviderImpl auth = new WindowsAuthProviderImpl();
IWindowsIdentity identity = auth.logonUser(user, pwd);
for(IWindowsAccount group : identity.getGroups())
group.getFqn();
然而,雖然我已經在Windows上登錄,但我仍然需要密碼...