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.
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.
L'image du docker est simplement extraite.
docker pull osixia/openldap
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
Comme le client est utilisé par python, installez la bibliothèque client LDAP `` ldap3 '' avec pip.
pip install ldap3
Maintenant que le serveur et le client LDAP sont prêts, il est temps de créer la source de l'opération.
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.
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.
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.
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.
Maintenant que nous avons ajouté le LDAP dc, nous allons ajouter et acquérir ou.
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.
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.
Maintenant que nous avons ajouté le LDAP ou, nous allons ajouter et acquérir cn.
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.
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.
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