LDAP wird zur Authentifizierung und Verwaltung von Daten mit Baumstruktur verwendet. Im Vergleich zu RDB wird LDAP seltener und anders verwendet, daher werde ich zusammenfassen, wie LDAP mit Python betrieben wird. Darüber hinaus sind an vielen Stellen LDAP-Authentifizierungsbeispiele verfügbar. Hier ist jedoch ein einfaches Beispiel, um die Arbeit zu vereinfachen.
Der LDAP-Server kann auch mit ldap unter Ubuntu oder Centos installiert werden, aber da es ein Docker-Image gab, werde ich das verwenden.
Das Docker-Image wird einfach gezogen.
docker pull osixia/openldap
Stellen Sie sicher, dass Sie das ldap-Kennwort, die oberste Domäne und jeden Port bereitstellen, wenn Sie das Image starten. Wenn Sie das Docker-Netzwerk verwenden, legen Sie das Netzwerk und die IP-Adresse fest, ohne den Port bereitzustellen.
docker run -p 389:389 -p 636:636 --env LDAP_DOMAIN="sample-ldap" --env LDAP_ADMIN_PASSWORD="LdapPass" --name LDAPSERVER --detach osixia/openldap
Ergebnis
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f6e1b4eaf29 osixia/openldap "/container/tool/run" 2 hours ago Up 2 hours 0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp LDAPSERVER
Da der Client von Python verwendet wird, installieren Sie die LDAP-Clientbibliothek `` `ldap3``` mit pip.
pip install ldap3
Nachdem der LDAP-Server und der Client bereit sind, ist es Zeit, die Quelle des Vorgangs zu erstellen.
Sie müssen sich anmelden, um LDAP zu betreiben. Melden Sie sich also zuerst an. Stellen Sie die Serverklasse mit den erforderlichen Einstellungen wie IP-Adresse, Portnummer und Zeitüberschreitung des LDAP-Servers ein. Verwenden Sie diese Serverklasse, um eine Verbindungsklasse zu generieren. Zu diesem Zeitpunkt sind Sie nicht mit dem LDAP-Server verbunden, sondern werden zum ersten Mal mit `bind ()`
verbunden. dc und password sind die Werte, die Sie während des Docker-Laufs angegeben haben, und cn ist standardmäßig admin.
main.py
conn = Connection(server, 'cn=admin,dc=sample-ldap', password='LdapPass')
result = conn.bind()
print(result)
Ergebnis
> python main.py'
True
Da das Ergebnis der Bindung True ist, können Sie sehen, dass Sie eine Verbindung zum LDAP-Server herstellen können.
Nachdem wir eine Verbindung hergestellt haben, werden wir LDAP hinzufügen und abrufen. LDAP besteht aus einer Baumstruktur in der Reihenfolge dc, ou, cn von oben. Fügen Sie also zuerst dc hinzu und holen Sie es ab.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Geben Sie im ersten Argument der `add function
der erstellten Verbindung die Zeichenfolge an, die den DC, den Sie hinzufügen möchten, und den oberen DC verbindet, und geben Sie im zweiten Argument
domain'`
an. Ich werde. Wenn Sie zu diesem Zeitpunkt ein Leerzeichen nach dem Komma in die erste Argumentzeichenfolge einfügen, tritt ein Fehler auf. Seien Sie also vorsichtig.
main.py
#Domain hinzufügen
dc_result = conn.add('dc=sample-component,dc=sample-ldap', 'domain')
print(dc_result)
Ergebnis
True
Das Ausführungsergebnis ist das gleiche wie das Binden, und True wird als Ergebnis des Hinzufügens zurückgegeben, sodass Sie sehen können, dass es hinzugefügt wurde.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Holen Sie sich die oben hinzugefügte DC. Geben Sie den LDAP-Pfad an, den Sie im ersten Argument von "conn.search ()" überprüfen möchten. Das zweite Argument gibt `domain``` an. Infolgedessen können Sie die Beispielkomponenteninformationen in
conn.entries``
abrufen.
main.py
#Eine Domain erhalten
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=domain)')
print(conn.entries)
Ergebnis
True
[DN: dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T22:35:26.491599
]
Dieses Mal kann ein Zieleintrag erhalten werden, da die Domäne durchsucht wird, indem die Domäne als zweites Argument angegeben wird. Ich werde die Quelle später veröffentlichen, aber Sie können mehr als einen erhalten, indem Sie andere Werte in das zweite Argument einfügen.
Nachdem wir den LDAP-Gleichstrom hinzugefügt haben, werden wir den Ou hinzufügen und erhalten.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Geben Sie die Zeichenfolge an, die Sie und dc verbindet, die Sie zum ersten Argument der `add function
der erstellten Verbindung hinzufügen möchten, und geben Sie
`'organisationalUnit```` zum zweiten Argument an.
main.py
#Domain hinzufügen
ou_result = conn.add('ou=sample-unit,dc=sample-component,dc=sample-ldap', 'organizationalUnit')
print(ou_result)
Ergebnis
True
Das Ausführungsergebnis ist das gleiche wie das Binden, und True wird als Ergebnis des Hinzufügens zurückgegeben, sodass Sie sehen können, dass es hinzugefügt wurde.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Holen Sie sich das oben hinzugefügte. Geben Sie den Pfad an, nach dem Sie suchen möchten, im ersten Argument von `conn.search ()`
. Das zweite Argument gibt `organisationalUnit``` an. Infolgedessen können Sie die Informationen zur Sample-Einheit in
conn.entries``
abrufen.
main.py
#Organisation erhalten
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=organizationalUnit)')
print(conn.entries)
#DC Erwerb einer bestimmten Organisation
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=organizationalUnit)')
print(conn.entries)
Ergebnis
[DN: ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:27:36.594396]
[DN: ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:27:36.604398
, DN: ou=sample-unit2,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:27:36.604398
]
Wenn Sie im ersten Argument nach einer Organisation suchen, können Sie einen Eintrag von Interesse erhalten. Wenn Sie nach einer Domain suchen, können Sie so viele wie die Domain erhalten, die die Domain enthält.
Nachdem wir das LDAP hinzugefügt haben, werden wir cn hinzufügen und erwerben.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Geben Sie die Zeichenfolge an, die cn, ou und dc verbindet, die Sie zum ersten Argument der `add function
der erstellten Verbindung hinzufügen möchten, und geben Sie im zweiten Argument
`` inetOrgPerson'``` an. Geben Sie im dritten Argument zusätzliche Informationen an.
main.py
#Domain hinzufügen
cn_result = conn.add('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', 'inetOrgPerson', {'sn':'sample'})
print(cn_result)
Ergebnis
True
Das Ausführungsergebnis ist das gleiche wie das Binden, und True wird als Ergebnis des Hinzufügens zurückgegeben, sodass Sie sehen können, dass es hinzugefügt wurde.
Der Beispielcode ist eine Fortsetzung der obigen Quelle. Holen Sie sich die oben hinzugefügte cn. Geben Sie den Pfad an, nach dem Sie suchen möchten, im ersten Argument von `conn.search ()`
. Das zweite Argument gibt `inetOrgPerson``` an. Infolgedessen können Sie die Informationen zum Beispielnamen in
conn.entries``
abrufen.
main.py
#Einen gemeinsamen Namen erhalten
conn.search('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)
#Erwerb Ihres bezeichneten gemeinsamen Namens
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)
#Holen Sie sich den von dc angegebenen allgemeinen Namen
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)
Ergebnis
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:36:41.125246
]
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:36:41.156378
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:36:41.157365
, DN: cn=sample-name3,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:36:41.157365
, DN: cn=sample-name1,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:36:41.157365
]
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:51:20.773638
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:51:20.773638
, DN: cn=sample-name3,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:51:20.774650
, DN: cn=sample-name1,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:51:20.774650
, DN: cn=sample-name,ou=sample-unit1,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T23:51:20.774650
]
Wenn Sie nach einem allgemeinen Namen suchen, indem Sie inetOrgPerson als zweites Argument angeben, können Sie einen Zieleintrag erhalten. Wenn Sie nach einer Organisation oder Domäne suchen, können Sie so viele wie die Anzahl der darin enthaltenen cn abrufen.
In Bezug auf LDAP habe ich es nicht aus der LDAP-Domäne hinzugefügt oder aus jedem Verzeichnis gesucht, indem ich die Suchmethode wie dieses Mal geändert habe, da es nur als LDAP-Authentifizierung verwendet wurde. Ich habe die Angewohnheit, es zu verwenden, aber es ist möglicherweise einfacher als RDB für baumstrukturierte Daten zu verwenden, da Sie den Wert auf einfachere Weise erhalten können, als Sie denken. Als nächstes werden wir uns andere Operationen ansehen.
Recommended Posts