使用ldapsearch验证失败

时间:2016-04-19 19:24:29

标签: authentication ldap

我使用Apache Directory Studio创建了一个本地ldap服务器。使用uid" djiao1"创建用户条目。和密码" 123456" (SHA哈希密码)。

我能够使用以下ldapsearch命令搜索用户:

package texasLAMPConversion;

import java.sql.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TexasLAMPConversion {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String host = "jdbc:sqlserver://serverName\\instanceName";
        String uName = "*********";
        String uPass = "*********";
        Connection conn = null;

        try {
             conn  = DriverManager.getConnection(host, uName,uPass);
             if (conn != null) {                                System.out.println("Connected to the database");
              } 
        } catch (SQLException ex) {
            System.out.println(ex.getMessage() );
            ex.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
        }

        FileWriter fw= null;
        File file =null;
           try {
                file=new File("C:/temp/generated_stmts_update_t_customer_master.sql");
                if(!file.exists()) {
                    file.createNewFile();
                }
                fw = new FileWriter(file);
           }catch (IOException e) {
                e.printStackTrace();
                }

        String  oldKey = "8000001234", newKey = "8";
        int     lenAcct = 10;
        oldKey = ReformatOldAcct(lenAcct, oldKey );
        newKey = leftZeroAcct(lenAcct, newKey);
        System.out.println("oldkey = " + oldKey + " and newKey = " + newKey);

    }

    private static String ReformatOldAcct(int lenAcct, String oldKey) {
        // TODO Auto-generated method stub
        String reformatedAcct = "";
        reformatedAcct = "0" + oldKey.substring(2, lenAcct);
        return (reformatedAcct);

    }

    private static String leftZeroAcct(int lenAcct, String acctNo) {
        // TODO Auto-generated method stub
        int index =0;
        int currentLengthAcct;
        String  leadingZero = "";
        currentLengthAcct = acctNo.length();

        while (index < (lenAcct -currentLengthAcct) ) {
            leadingZero = '0'  + leadingZero;
            index ++;
        }
        return (leadingZero + acctNo);
    }

}

但是,如果我使用-W运行来提示密码并输入&#34; 123456&#34;我得到了#34;无效的凭据&#34;错误:

at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2226)    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2226)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2210)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2210)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.Prelogin(SQLServerConnection.java:2095)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.Prelogin(SQLServerConnection.java:2095)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1799)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1799)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1454)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1454)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1285)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1285)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1131)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1131)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at texasLAMPConversion.TexasLAMPConversion.main(TexasLAMPConversion.java:20)
at texasLAMPConversion.TexasLAMPConversion.main(TexasLAMPConversion.java:20)

我尝试了显示为userPassword ldapsearch -H ldap://localhost:10389 -x uid=djiao1 # extended LDIF # # LDAPv3 # base <> (default) with scope subtree # filter: uid=djiao1 # requesting: ALL # # djiao, Users, example.com dn: cn=djiao,ou=Users,dc=example,dc=com sn: jiao cn: djiao objectClass: top objectClass: inetOrgPerson objectClass: person objectClass: organizationalPerson userPassword:: e3NoYX1mRXFOQ2NvM1lxOWg1WlVnbEQzQ1pKVDRsQnM9 uid: djiao1 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 的非常长的字符串,但仍然遇到了同样的错误。

以下屏幕截图验证成功,密码为123456,供用户使用。为什么密码不起作用?enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您不使用登录,而是使用密码, 尝试这样的事情:

ldapsearch -x -LLL -H ldap://localhost:10389/  -b dc=example,dc=com  -D "cn=djiao,ou=Users,dc=example,dc=com" -w 123456 uid=djiao1

关键时刻,这是用户使用的密码:

cn=djiao,ou=Users,dc=example,dc=com