Holen Sie sich mit Python zusätzliche Daten zu LDAP

Einführung

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.

Umweltvorbereitung

LDAP-Server

Der LDAP-Server kann auch mit ldap unter Ubuntu oder Centos installiert werden, aber da es ein Docker-Image gab, werde ich das verwenden.

Ziehen des Docker-Bildes

Das Docker-Image wird einfach gezogen.


docker pull osixia/openldap

Starten Sie das Docker-Image

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

Installieren der Ldap-Bibliothek

Da der Client von Python verwendet wird, installieren Sie die LDAP-Clientbibliothek `` `ldap3``` mit pip.


pip install ldap3

LDAP-Operationen

Nachdem der LDAP-Server und der Client bereit sind, ist es Zeit, die Quelle des Vorgangs zu erstellen.

Melden Sie sich bei LDAP an

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.

Domain

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.

Domain hinzufügen

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.

Eine Domain erhalten

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.

Organisation

Nachdem wir den LDAP-Gleichstrom hinzugefügt haben, werden wir den Ou hinzufügen und erhalten.

Ergänzung der Organisation

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.

Organisation erhalten

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.

Gemeinsamen Namen

Nachdem wir das LDAP hinzugefügt haben, werden wir cn hinzufügen und erwerben.

Hinzufügung eines gebräuchlichen Namens

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.

Einen gemeinsamen Namen erhalten

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.

abschließend

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

Holen Sie sich mit Python zusätzliche Daten zu LDAP
Holen Sie sich zusätzliche Daten zu LDAP mit Python (Writer und Reader)
Holen Sie sich Youtube-Daten mit Python
Holen Sie sich LeapMotion-Daten in Python.
[Python] Mit DataReader Wirtschaftsdaten abrufen
Beginnen Sie mit Python mit Blender
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Holen Sie sich Google Fit API-Daten in Python
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Beginnen wir mit TopCoder in Python (Version 2020)
Datenanalyse mit Python 2
Holen Sie sich Datum in Python
Holen Sie sich ein Date mit Python
Datenanalyse mit Python
Holen Sie sich mit Python Zeitreihendaten von k-db.com
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Holen Sie sich YouTube-Kommentare in Python
Holen Sie sich den Ländercode mit Python
Mit Python erstellte Beispieldaten
Behandeln Sie Umgebungsdaten in Python
Schaben mit Selen in Python
Holen Sie sich letzten Monat in Python
Betreiben Sie LibreOffice mit Python
Holen Sie sich Twitter-Timeline mit Python
Schaben mit Chromedriver in Python
Zeigen Sie UTM-30LX-Daten in Python an
Debuggen mit pdb in Python
Holen Sie sich Finanzdaten mit Python (dann ein wenig basteln)
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess
Umgang mit Sounds in Python
Holen Sie sich mit Python Daten vom GPS-Modul mit 10 Hz
Scraping mit Selen in Python
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Scraping mit Tor in Python
Tweet mit Bild in Python
Holen Sie sich die Terminalgröße in Python
Holen Sie sich explizit EOF in Python
Kombiniert mit Ordnungszahl in Python
Holen Sie sich die Thread-ID mit Python
Beginnen Sie mit Python! ~ ② Grammatik ~
Holen Sie sich Lager mit Python
Holen Sie sich Evernote-Notizen in Python
Holen Sie sich das Home-Verzeichnis mit Python
Holen Sie sich Tastaturereignis mit Python
Nehmen Sie Kontakt mit der funktionalen Programmierung in JavaScript oder Python 3 auf
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
Holen Sie sich Alembic-Informationen mit Python
Holen Sie sich japanische Synonyme mit Python
Lesen von JSON-Daten mit Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Abrufen von Daten aus der Analyse-API mit Google API Client für Python