2010-06-30 86 views
1

我有一个桌面应用程序,我可以通过authentication.getPrincipal()。toString()代码行获取域用户名。如果域名和用户输入完全匹配,我授予对用户的所有访问权限。另一方面,当用户键入另一个用户名(与域用户名不匹配)时,程序会检查数据库中的密码。Windows密码使用LDAP进行身份验证

问题是我想检查密码与Windows域密码不与DB.When用户写入用户名时,程序应该查找此用户名的Windows域密码。我尝试LDAP,但我无法得到使用LDAP的域名密码。

是否有任何可能的方法来检查用户的域密码?换句话说,有没有可能的方法来查找属于用户的密码?

+1

我刚刚得知眼前这个属性,对不起:)我已经做到了。 – 2010-06-30 08:15:42

回答

3

应该不可能检索密码(没有人应该能够获得另一个用户的密码)。

但是,如果他们在以该帐户登录时访问,则不需要检查密码。你可以去authentication.getPrincipal的事实表明,他们作为该用户登录 - 你不再需要密码。

或者,如果他们正在使用给定的Windows身份验证用户名和密码访问,而没有以该用户身份登录,可能有办法查看他们的密码是否有效,但我怀疑它,因为IsValid()布尔调用会让你知道你刚刚移交的密码是有效的,因为Windows泄露了他们的密码。

编辑:

的Java LDAP认证码(来源:http://java.sun.com/products/jndi/tutorial/ldap/security/ldap.html

// Set up the environment for creating the initial context 
Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial"); 

// Authenticate 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
env.put(Context.SECURITY_PRINCIPAL, authentication.getPrincipal().toString()); 
env.put(Context.SECURITY_CREDENTIALS, "PASSWORD"); 

// Create the initial context 
DirContext ctx = new InitialDirContext(env); 
+1

问题是,当用户尝试使用另一台计算机登录时,我想进行密码检查,因为他/她试图登录另一台与他/她的域具有不同域的计算机。所以对LDAP来说这是不可能的? – 2010-06-30 08:18:38

+0

回答更新了代码 – 2010-07-01 02:51:28

相关问题