首页 文章

Windows密码使用LDAP进行身份验证

提问于
浏览
1

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

问题是我想用Windows域密码检查密码而不是DB . 当用户写入用户名时,程序应查找此用户名的Windows域密码 . 我尝试LDAP但我无法通过LDAP获取域密码 .

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

1 回答

  • 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);
    

相关问题