Windows密码使用LDAP进行身份验证
我有一个桌面应用程序,我可以通过authentication.getPrincipal()。toString()代码行获取域用户名。如果域名和用户输入完全匹配,我授予对用户的所有访问权限。另一方面,当用户键入另一个用户名(与域用户名不匹配)时,程序会检查数据库中的密码。Windows密码使用LDAP进行身份验证
问题是我想检查密码与Windows域密码不与DB.When用户写入用户名时,程序应该查找此用户名的Windows域密码。我尝试LDAP,但我无法得到使用LDAP的域名密码。
是否有任何可能的方法来检查用户的域密码?换句话说,有没有可能的方法来查找属于用户的密码?
应该不可能检索密码(没有人应该能够获得另一个用户的密码)。
但是,如果他们在以该帐户登录时访问,则不需要检查密码。你可以去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);
问题是,当用户尝试使用另一台计算机登录时,我想进行密码检查,因为他/她试图登录另一台与他/她的域具有不同域的计算机。所以对LDAP来说这是不可能的? – 2010-06-30 08:18:38
回答更新了代码 – 2010-07-01 02:51:28
我刚刚得知眼前这个属性,对不起:)我已经做到了。 – 2010-06-30 08:15:42