我有一个桌面应用程序,我可以使用authentication.getPrincipal()。toString()代码行获取域用户名。如果域名和用户输入完全匹配我授予用户的所有访问权限。另一方面,当用户键入另一个用户名(与域用户名不匹配)时,程序将检查数据库中的密码。
问题是我想用Windows域密码检查密码而不是DB.当用户写入用户名时,程序应查找此用户名的Windows域密码。我尝试LDAP但我无法获取域名使用LDAP的密码。
是否有可能通过域密码检查用户?换句话说,是否有可能查找属于用户的密码?
答案 0 :(得分:3)
检索密码应该是不可能的(没有人应该能够获得其他用户的密码)。
但是,如果他们在以该帐户登录时访问,则无需检查密码。您可以进行authentication.getPrincipal这一事实表明他们 以该用户身份登录 - 您不再需要密码。
或者,如果他们使用给定的windows-auth用户名和密码进行访问而未以该用户身份登录,则可能有办法查看他们的密码是否有效,但我对此表示怀疑,因为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);