Obtenez des données supplémentaires vers LDAP avec python

introduction

LDAP est utilisé pour l'authentification et la gestion des données structurées en arborescence. Comparé à RDB, LDAP est utilisé moins souvent et est utilisé différemment, je vais donc résumer comment faire fonctionner LDAP avec python. De plus, des exemples d'authentification LDAP sont disponibles dans de nombreux endroits, mais voici un exemple simple pour faciliter les choses.

Préparation environnementale

Serveur LDAP

Le serveur LDAP peut également être installé avec ldap sur Ubuntu ou Centos, mais comme il y avait une image docker, je vais l'utiliser.

extraction de l'image du docker

L'image du docker est simplement extraite.


docker pull osixia/openldap

Lancer l'image du docker

Assurez-vous de monter le mot de passe LDAP, le domaine supérieur et chaque port lors du démarrage de l'image. Si vous utilisez le réseau Docker, définissez le réseau et l'adresse IP sans monter le port.


 docker run -p 389:389 -p 636:636 --env LDAP_DOMAIN="sample-ldap" --env LDAP_ADMIN_PASSWORD="LdapPass" --name LDAPSERVER --detach osixia/openldap

résultat


> 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

Installation de la bibliothèque Ldap

Comme le client est utilisé par python, installez la bibliothèque client LDAP `` ldap3 '' avec pip.


pip install ldap3

Opérations LDAP

Maintenant que le serveur et le client LDAP sont prêts, il est temps de créer la source de l'opération.

Connectez-vous à LDAP

Vous devez vous connecter pour utiliser LDAP, alors connectez-vous d'abord. Définissez la classe Serveur avec les paramètres nécessaires tels que l'adresse IP, le numéro de port et le délai d'expiration du serveur LDAP. Utilisez cette classe Server pour générer une classe Connection. Pour le moment, il n'est pas connecté au serveur LDAP, mais est connecté pour la première fois avec bind () '' ''. dc et mot de passe seront les valeurs que vous avez spécifiées lors de l'exécution de docker, et cn sera par défaut admin.

main.py



conn = Connection(server, 'cn=admin,dc=sample-ldap',  password='LdapPass')
result = conn.bind()
print(result)

résultat

> python main.py' 
True

Puisque le résultat de la liaison est True, vous pouvez voir que vous pouvez vous connecter au serveur LDAP.

domaine

Maintenant que nous avons une connexion, nous allons ajouter et obtenir LDAP. LDAP est composé d'une arborescence dans l'ordre de dc, ou, cn à partir du haut, donc commencez par ajouter et obtenir à partir de dc.

Ajouter un domaine

L'exemple de code est une continuation de la source ci-dessus. Spécifiez la chaîne de caractères qui relie le dc que vous voulez ajouter et le dc supérieur dans le premier argument de la 'fonction d'ajout' '`de la connexion créée, et spécifiez` domaine'`` `dans le deuxième argument Je vais. Notez que si vous insérez un espace après la virgule dans la première chaîne d'argument à ce moment, une erreur se produira.

main.py



#Ajouter un domaine
dc_result = conn.add('dc=sample-component,dc=sample-ldap', 'domain')
print(dc_result)

résultat

True

Le résultat de l'exécution est le même que celui de la liaison et True est renvoyé à la suite de l'ajout, vous pouvez donc voir qu'il était possible d'ajouter.

Obtention d'un domaine

L'exemple de code est une continuation de la source ci-dessus. Obtenez le dc ajouté ci-dessus. Spécifiez le chemin LDAP que vous souhaitez archiver dans le premier argument de conn.search () '' . Le deuxième argument spécifie domaine```. En conséquence, vous pouvez obtenir les informations sur les exemples de composants dans conn.entries`` .

main.py



#Obtention d'un domaine
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=domain)')
print(conn.entries)

résultat

True
[DN: dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-25T22:35:26.491599
]

Cette fois, puisque le domaine est recherché en spécifiant le domaine comme deuxième argument, une entrée cible peut être obtenue. Je publierai la source plus tard, mais vous pouvez en obtenir plusieurs en mettant d'autres valeurs dans le deuxième argument.

organisation

Maintenant que nous avons ajouté le LDAP dc, nous allons ajouter et acquérir ou.

Ajout d'organisation

L'exemple de code est une continuation de la source ci-dessus. Spécifiez la chaîne de caractères qui relie ou et dc que vous voulez ajouter au premier argument de la fonction ```add '' de la connexion créée, et spécifiez 'organizationUnit' `au second argument.

main.py



#Ajouter un domaine
ou_result = conn.add('ou=sample-unit,dc=sample-component,dc=sample-ldap', 'organizationalUnit')
print(ou_result)

résultat

True

Le résultat de l'exécution est le même que celui de la liaison et True est renvoyé à la suite de l'ajout, vous pouvez donc voir qu'il était possible d'ajouter.

Obtenir une organisation

L'exemple de code est une continuation de la source ci-dessus. Obtenez le ou ajouté ci-dessus. Spécifiez le chemin que vous souhaitez rechercher dans le premier argument de conn.search () '' . Le deuxième argument spécifie ```organizationalUnit```. En conséquence, vous pouvez obtenir les informations d'unité d'échantillonnage dans conn.entries`` .

main.py



#Obtenir une organisation
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=organizationalUnit)')
print(conn.entries)

#dc acquisition d'une organisation spécifiée
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=organizationalUnit)')
print(conn.entries)


résultat


[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
]

Si vous recherchez une organisation dans le premier argument, vous pouvez obtenir une entrée intéressante. Si vous recherchez un domaine, vous pouvez en obtenir autant que le nombre de ou que le domaine contient.

Nom commun

Maintenant que nous avons ajouté le LDAP ou, nous allons ajouter et acquérir cn.

Ajout du nom commun

L'exemple de code est une continuation de la source ci-dessus. Spécifiez la chaîne de caractères qui connecte cn, ou et dc que vous voulez ajouter au premier argument de la add function '' ʻde la connexion créée, et spécifiez `` `'inetOrgPerson' dans le second argument. Et spécifiez des informations supplémentaires dans le troisième argument.

main.py



#Ajouter un domaine
cn_result = conn.add('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', 'inetOrgPerson', {'sn':'sample'})
print(cn_result)

résultat

True

Le résultat de l'exécution est le même que celui de la liaison et True est renvoyé à la suite de l'ajout, vous pouvez donc voir qu'il était possible d'ajouter.

Obtenir un nom commun

L'exemple de code est une continuation de la source ci-dessus. Obtenez le cn ajouté ci-dessus. Spécifiez le chemin que vous souhaitez rechercher dans le premier argument de conn.search () '' . Le deuxième argument spécifie ```inetOrgPerson```. En conséquence, vous pouvez obtenir les informations sur le nom de l'échantillon dans conn.entries`` .

main.py



#Obtenir un nom commun
conn.search('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)

#Acquisition de votre nom usuel désigné
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)

#Obtenez le nom commun spécifié par dc
conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)

résultat


[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
]

Si vous recherchez un nom commun en spécifiant inetOrgPerson comme deuxième argument, vous pouvez obtenir une entrée cible. Si vous recherchez une organisation ou un domaine, vous pouvez obtenir autant que le nombre de cn que chacun contient.

en conclusion

Concernant LDAP, puisqu'il n'était utilisé que comme authentification LDAP, je ne l'ai pas ajouté depuis le domaine LDAP ni de recherche dans chaque annuaire en changeant la méthode de recherche comme cette fois. J'ai l'habitude de l'utiliser, mais il peut être plus facile à utiliser que RDB pour les données structurées en arborescence, car vous pouvez obtenir la valeur d'une manière plus simple que vous ne le pensez. Ensuite, nous examinerons d'autres opérations.

Recommended Posts

Obtenez des données supplémentaires vers LDAP avec python
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
Obtenez des données Youtube avec python
Obtenez des données LeapMotion en Python.
Obtenir des données de Quandl en Python
[Python] Obtenez des données économiques avec DataReader
Démarrez avec Python avec Blender
[Note] Obtenir des données de PostgreSQL avec Python
Essayez de travailler avec des données binaires en Python
Obtenez les données de l'API Google Fit en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Commençons avec TopCoder en Python (version 2020)
Analyse de données avec python 2
Obtenir la date en Python
Obtenez date avec python
Analyse de données avec Python
Obtenez des données de séries chronologiques de k-db.com avec Python
[Python] Récupérez les fichiers dans le dossier avec Python
Lire les données de la table dans un fichier PDF avec Python
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
J'ai essayé d'obtenir des données CloudWatch avec Python
Obtenez des commentaires YouTube en Python
Obtenez le code du pays avec python
Exemple de données créées avec python
Gérer les données ambiantes en Python
Grattage au sélénium en Python
Obtenez le mois dernier en Python
Exploitez LibreOffice avec Python
Obtenez la chronologie Twitter avec Python
Grattage avec chromedriver en python
Afficher les données UTM-30LX en Python
Débogage avec pdb en Python
Obtenez des données financières avec python (puis un peu de bricolage)
[Python] Obtenez les nombres dans l'image graphique avec OCR
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Obtenez une sortie standard en temps réel avec le sous-processus Python
Gérer les sons en Python
Obtenez des données du module GPS à 10 Hz avec Python
Grattage avec du sélénium en Python
Obtenez des résultats au format dict avec Python psycopg2
Grattage avec Tor en Python
Tweet avec image en Python
Obtenir la taille du terminal en Python
Obtenir explicitement EOF en python
Combiné avec ordinal en Python
Obtenir l'ID de thread avec python
Commencez avec Python! ~ ② Grammaire ~
Obtenez des stocks avec Python
Obtenez des notes Evernote en Python
Obtenir le répertoire personnel avec python
Obtenir un événement de clavier avec python
Entrez en contact avec la programmation fonctionnelle en JavaScript ou Python 3
Obtenir des données de la base de données via ODBC avec Python (Access)
Obtenez des informations sur l'alambic avec Python
Obtenez des synonymes japonais avec Python
Lire des données json avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
Débarrassez-vous des données sales avec Python et les expressions régulières
[Homologie] Comptez le nombre de trous dans les données avec Python
Appuyez sur REST en Python pour obtenir des données de New Relic
Obtenez des données de l'API d'analyse avec le client API Google pour python