2016年11月13日 星期日

apacheds API client connect with user/pwd

如果 LDAP server 允許匿名登入的話,連線上只要打 port 之類的就好
ex:
        LdapConnection connection = new LdapNetworkConnection( "127.0.0.1", 10389 );
        connection.connect();

        //do something....
      
        connection.close();

不過如果需要用 user/pwd 登入 的話,那就是要利用 config 連線
http://directory.apache.org/api/user-guide/2.1-connection-disconnection.html
然後就要記得 bind,才能再進行其他的操作
http://directory.apache.org/api/user-guide/2.2-binding-unbinding.html

目前的寫法大概是這樣~
Name: 用dn name 比較沒問題
Credentials: 就是 password...
SslProtocol:apacheDS 提供的SSL是 ldaps:// 協定。沒設定就是一般沒加密連線
(簡易寫法連線,最後面打true,就可以走 ssl)
連線上了之後要 bind...

        LdapConnectionConfig config = new LdapConnectionConfig();
        config.setLdapHost( "localhost" );
        config.setLdapPort( 10389 );
        config.setName( "cn=AddTest11,ou=users,dc=example,dc=com" );
        config.setCredentials( "t123456" );
        config.setSslProtocol("ldaps://");
       
        LdapConnection connection = new LdapNetworkConnection(config);
       
        connection.connect();
        System.out.println("connection="+connection);
       
        connection.bind(config.getName(), config.getCredentials());
       
        if(connection.exists("uid=admin,ou=system"))  {
            System.out.println("true");
        }  else  {
            System.out.println("false");
        }
       
        connection.close();

如果 client 沒有進行 bind,server 端又設定 不能匿名訪問的話,在進行search 操作時,那個 server端會有錯誤訊息XD...但client 是無感的(但是查到的 entry 會是空的,但沒看到exception)...只是理論上看 source code,應該是會丟 LdapNoPermissionException 出來的,不知為啥client沒收到O_oa...

另外理論上,看文件~ 應該是要指定 bind dn,不過好像用 .bind() 也會過~
是說,可以用普通user連線,然後 bind 到 admin,權限可以比較大!(好像sudo一樣XD)
 

沒有留言: