0. Introducción
En el módulo routes01menu.py en el endpoint "/softprop/validate_login" que está definido por la función post_login, hacemos esta llamada
ldap_authenticated= xmldap.autheticate_by_login(login.usuari, login.paraula_de_pass)
Por tanto todo el tema de autenticación por LDAP se realiza en módulo "xmldap.py"
1. el módulo xmldap.py
Este módulo accede a unas propiedades para poder conectarse al servidor LDAP.
En concreto el fichero que guarda las propiedades tiene este contenido:
ldapWindows: serverName: mi-servidor.edificio.poblacion userPrefix: edificio\
Veamos el código del módulo xmldap.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | from ldap3 import Server, Connection, ALL, SUBTREE, ALL_ATTRIBUTES ,SAFE_SYNC, NTLM, ALL_ATTRIBUTES import sys import os #------Imprescindible para poder importar de otras carpetas (de basicutils) import sys from pathlib import Path path_root1 = Path(__file__).parents[1] # Damos un salto de directorio hacia arriba-> ximoutilsmod sys.path.append(str(path_root1)) path_root0 = Path(__file__).parents[0] # El mismo directorio sys.path.append(str(path_root0)) from basicutils import xmcrypto, xmfile # ------Fin imprescindible def get_props(): logs=[] logs.append('env='+str(os.environ)) logs.append('os.getenv("CONF_PYTHON")='+str(os.getenv("CONF_PYTHON"))) xmfile.add_lines_to_file('/home/eduard/kk.log', logs) conf_file=os.getenv("CONF_PYTHON")+'ldap.encrypted.yml' config= xmcrypto.get_properties_from_file(conf_file) return config['ldapWindows'] '''Autheticate by login name and password''' def autheticate_by_login(username: str, password: str)->bool: config=get_props() try: server = Server(config['serverName'], get_info=ALL) my_user=config['userPrefix']+username conn = Connection(server, user=my_user, password=password) if conn.bind(): print('xmldap.autheticate_by_login: OK') return True else: print('xmldap.autheticate_by_login: FALSE') return False except Exception as e: print(f"LDAP error1 : {e}", file=sys.stderr) if 'conn' in locals(): conn.unbind() return False |
Lo importante de este código es:
- La importación de los objetos necesarios de la biblioteca ldap3, en este caso Server y Connection que se encuentra en la primera línea
- La función get_props solamente sirve para leer las propiedades que se muestran arriba que se encuentran en un fichero encriptado
- Para ver si las credenciales son correctas primeramewnte se define el servidor con solo decir su nombre (Línea 28).
- El usuario hay que pasarlo con un prefijo que se encuentra en propiedades (Línea 29)
- Si se intenta hacer la conexión al servidor con el usuario (+ prefijo) y contraseña introducida, yu es correcta entonces las credenciales del usuario son correctas y quedan validadas.(Líneas 28-33)
- Si no se establece la conexión, entonces hya un error (seguramente de credenciales)
No hay comentarios :
Publicar un comentario