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進行操作,前面的文章中給除了簡單的示例程式碼進行驗證,詳細參看:
- LDAP基礎:2:使用Java驗證OpenLdap使用者登入:https://blog.csdn.net/liumiaocn/article/details/83720115
這裡接著使用對剛剛啟動的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從客戶端進行訪問,也可以通過程式碼的程式設計介面進行訪問。