【问题标题】:Windows password Authentication with LDAP使用 LDAP 进行 Windows 密码身份验证
【发布时间】:2010-06-30 08:00:05
【问题描述】:

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

问题是我想用windows域密码而不是DB来检查密码。当用户写用户名时,程序应该为这个用户名查找windows域密码。我尝试使用LDAP但我无法获取域LDAP 密码。

有没有什么方法可以检查域密码的用户?换句话说,有没有一种可能的方法来查找属于用户的密码?

【问题讨论】:

  • 我现在刚刚学了这个属性,sorry :) 我已经做到了。

标签: java authentication ldap windows-authentication


【解决方案1】:

应该不可能找回密码(没有人应该能够得到另一个用户的密码)。

但是,如果他们在以该帐户登录时访问,则无需检查密码。您可以进行 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);

【讨论】:

  • 问题是当用户尝试使用另一台计算机登录时,我想进行密码检查,因为他/她正在尝试登录另一台与他/她的域具有不同域的计算机。所以这对 LDAP 来说是不可能的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2014-02-28
  • 2015-10-03
  • 2014-03-08
  • 2014-08-09
  • 2011-07-23
相关资源
最近更新 更多