1. 程式人生 > >LDAP基礎:3:通過389埠對openldap進行操作

LDAP基礎:3:通過389埠對openldap進行操作

在前面的文章中介紹瞭如何使用docker快速搭建ldap服務並進行確認,以及在java中如何使用jndi對ldap進行訪問,但是按照官方github上的示例,由於沒有將埠暴露出來,所以在宿主機對容器內執行的openldap服務進行訪問只能通過容器IP,而且前提是宿主機和容器是能夠互通的。但是隻需要將服務的埠暴露出來,在外部也可以直接訪問了。

埠及說明

預設ldap使用389埠,加密使用636

啟動

使用 -p將389埠進行暴露

docker run --name openldap -p 389:389 --detach osixia/openldap:1.2.2

確認宿主機IP

liumiaocn:openldap liumiao$ ifconfig |grep 192
	inet 192.168.31.242 netmask 0xffffff00 broadcast 192.168.31.255
liumiaocn:openldap liumiao$

連線方式1: 通過ldapuri

通過ldapsearch的ldapuri進行訪問,形式如下:

ldapsearch -x -H ldap://IP地址或者可解析的地址:埠 -b 指定的baseDN -D 繫結的伺服器的DN -w 簡單認證方式的密碼

  • 使用示例
liumiaocn:openldap liumiao$ ldapsearch -x -H ldap://192.168.31.242:389 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example

# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9TE5GaU0rZVZXNGlRR3FDdzQ5UzRMNjRlb2xjMjY5OU4=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
liumiaocn:openldap liumiao$

另外,如果埠為389,在ldapuri中可以省略,上述例子則變為:

ldapsearch -x -H ldap://192.168.31.242 -b dc=example,dc=org -D “cn=admin,dc=example,dc=org” -w admin

連線方式2: 使用hostname和ip的方式

這裡繼續使用ldapsearch作為連線驗證方式,除了-H指定ldapuri,也可以直接通過-h和-p來指定hostname和ip的方式進行

ldapsearch -x -h IP地址或者可解析的地址 -p 埠 -b 指定的baseDN -D 繫結的伺服器的DN -w 簡單認證方式的密碼

  • 使用例項
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example

# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9TE5GaU0rZVZXNGlRR3FDdzQ5UzRMNjRlb2xjMjY5OU4=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
liumiaocn:openldap liumiao$ 

同樣,port為389時也可以省略,上述方式可以變為:

ldapsearch -x -h 192.168.31.242 -b dc=example,dc=org -D “cn=admin,dc=example,dc=org” -w admin

連線方式3: 使用JNDI方式連線

使用java的JNDI可以對LDAP進行操作,前面的文章中給除了簡單的示例程式碼進行驗證,詳細參看:

這裡接著使用對剛剛啟動的OpenLdap容器的服務進行連線確認, 首先確認連線資訊

  • Ldap使用的IP: 192.168.31.242
  • 使用者名稱(DN):cn=admin,dc=example,dc=org
  • 使用者密碼:admin

使用IP+port的ldapuri

liumiaocn:~ liumiao$ java LdapDemo "192.168.31.242:389" "cn=admin,dc=example,dc=org" "admin"
IPAdress: 192.168.31.242:389
Username: cn=admin,dc=example,dc=org
Password: admin
env setting
login verification begins...
login successfully.
liumiaocn:~ liumiao$

port為389的情況下也可以省略

liumiaocn:~ liumiao$ java LdapDemo "192.168.31.242" "cn=admin,dc=example,dc=org" "admin"
IPAdress: 192.168.31.242
Username: cn=admin,dc=example,dc=org
Password: admin
env setting
login verification begins...
login successfully.
liumiaocn:~ liumiao$ 

總結

這樣可以看到,一個通過docker方式快速啟動的OpenLdap服務,簡單的使用方式已經就緒,可以通過ldapsearch從客戶端進行訪問,也可以通過程式碼的程式設計介面進行訪問。