Crear un servicio de Python para consultar atributos de AD
Estoy integrando nuestro AD con servicios web que ejecutan Python en Linux usando Python-LDAP sobre SASL (DIGEST-MD5) para consultar los atributos de usuario de AD 2012 (división, departamento, extensión de teléfono, correo electrónico, etc.). Después de resolver los problemas específicos de mi servicio en un AD 2003, comencé a encontrarme con un error de SPN en nuestro nuevo AD 2012, que el resumen de uri no coincidía con ningún SPN en el servidor. He cruzado la lista SPN para ambos servidores y contienen análogos idénticos entre sí.
El error: el digest-uri no coincide con ningún LDAP SPN registrado para este servidor
¿La solución?
Esto se solucionó ejecutando:
setspn -A ldap/<Domain_Name> <Computer_Name>
Tenga en cuenta que crear una cuenta de servicio no solucionó mi error de SPN incluso cuando se ejecutó el siguiente comando:
setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>
simple_bind_s () no necesita SPN, sasl_interactive_bind_s () necesita SPN
Solo agregar el SPN a la lista de SPN de la máquina local funcionó para mi servicio Python-LDAP usando sasl_interactive_bind_s (). También debo tener en cuenta que el paso SPN se puede omitir si uso simple_bind_s () pero este método envía credenciales en texto sin formato que es inaceptable.
Sin embargo, noté que el registro solo permanece en la lista SPN durante aproximadamente un minuto antes de desaparecer. No hay errores cuando ejecuto el comando setspn, los registros de eventos están completamente vacíos, no hay duplicados en ninguna parte, se verifica con la búsqueda de -F en todo el bosque en la base dn y nada. Agregué e intenté volver a agregar y eliminar y moví el SPN de un objeto a otro para verificar que no se esconde en ningún lado, pero en el segundo que agrego el objeto en cualquier lugar y luego intento volver a agregarlo, me notifica un duplicado. Así que estoy muy seguro de que no hay un duplicado oculto en alguna parte.
El truco
Por ahora tengo una tarea programada que vuelve a ejecutar el comando para mantener el registro en la lista para que mi servicio funcione correctamente llamado "Hack SPN"
cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"
hasta que pueda averiguar por qué se está limpiando el SPN de la lista.
No soy el administrador principal de este AD en particular, ¿podría el administrador tener un servicio en ejecución que sincronice el SPN de otro servicio en el AD y no estar al tanto? Mi título es Desarrollador web, no como una excusa, sino para explicar mi ignorancia en asuntos de Active Directory. Me han dicho que convierta el AD en el DB maestro de usuario y he estado leyendo mucho, pero no puedo encontrar ningún lugar donde la gente tenga un problema con el SPN que se 'sobrescribe' o 'limpia' periódicamente y ninguno de los Los administradores están muy familiarizados con SPN fuera de las entradas de SQLServer.
¿Por qué necesito el hack?
Hasta ahora, mi pirateo no parece haber causado ningún problema a ningún usuario o servicio y no ha generado ningún error, por lo que el administrador dice que simplemente lo dejará correr y seguiré buscando. Pero luego me encuentro en la precaria situación de escribir un servicio cuya implementación se basa, esencialmente, un truco / escalofrío cron ... Entonces, cualquier ayuda sería apreciada.
Actualizar
Después de una conversación con el administrador del sistema, acordó que construir un servicio sobre un hack no es una solución, por lo tanto, me dio permiso para activar un servicio local con cifrado de punto final que puedo usar para mis propósitos, el resultado es el mismo . Estaré atento a lo que está causando que el SPN desaparezca. Los enlaces locales no son un problema al usar Python-LDAP y el servicio local ya está en funcionamiento después de solo una hora más o menos. Es lamentable que esencialmente esté envolviendo la funcionalidad integrada en LDAP, pero hacemos lo que tenemos que hacer.