Este método de autenticación funciona de forma similar a password, salvo que utiliza
LDAP como método de verificación de la contraseña. LDAP se emplea únicamente para validar las parejas de
nombre de usuario y contraseña. Por lo tanto, el usuario ya debe existir en la base de datos antes de
poder utilizar LDAP para la autenticación.
La autenticación LDAP puede funcionar en dos modos. En el primer modo, que llamaremos modo de vinculación
simple (simple bind mode), el servidor se vinculará al nombre distinguido (DN) construido como
prefix username suffix.
Normalmente, el parámetro prefix se utiliza para especificar
cn=, o bien DOMAIN\ en un entorno Active Directory.
El parámetro suffix se utiliza para especificar la parte restante del DN en un
entorno que no sea de Active Directory.
En el segundo modo, que llamaremos modo search+bind, el servidor primero se vincula al directorio LDAP
con un nombre de usuario y una contraseña fijos, especificados con ldapbinddn
y ldapbindpasswd, y realiza una búsqueda del usuario que intenta iniciar sesión
en la base de datos. Si no se configura ningún usuario y contraseña, se intentará un enlace anónimo con
el directorio. La búsqueda se realizará sobre el subárbol en ldapbasedn, e
intentará hacer una coincidencia exacta del atributo especificado en ldapsearchattribute.
Una vez encontrado el usuario en esta búsqueda, el servidor se vuelve a vincular al directorio como este
usuario, utilizando la contraseña especificada por el cliente, para verificar que el inicio de sesión es
correcto. Este modo es el mismo que el utilizado por los esquemas de autenticación LDAP en otros programas
de software, como Apache mod_authnz_ldap y pam_ldap. Este método
permite una flexibilidad significativamente mayor en cuanto a la ubicación de los objetos de usuario en
el directorio, pero provocará que se realicen dos solicitudes adicionales al servidor LDAP.
Las siguientes opciones de configuración se utilizan en ambos modos:
ldapserverNombres o direcciones IP de los servidores LDAP a los que conectarse. Se pueden especificar varios servidores, separados por espacios.
ldapportNúmero de puerto del servidor LDAP al que conectarse. Si no se especifica ningún puerto, se utilizará la configuración del puerto por defecto de la biblioteca LDAP.
ldapscheme
Establécelo en ldaps para utilizar LDAPS. Esta es una forma no estándar de utilizar
LDAP sobre SSL, compatible con algunas implementaciones de servidores LDAP. Consulta también la opción
ldaptls como alternativa.
ldaptls
Establécelo en 1 para que la conexión entre PostgreSQL y el servidor LDAP utilice cifrado TLS. Esto
emplea la operación StartTLS según la norma RFC 4513. Consulta también la opción
ldapscheme como alternativa.
Ten en cuenta que el uso de ldapscheme o ldaptls solo cifra el tráfico
entre el servidor PostgreSQL y el servidor LDAP. La conexión entre el servidor PostgreSQL y el cliente
PostgreSQL seguirá sin cifrar a menos que también se utilice SSL en ella.
Las siguientes opciones se utilizan únicamente en el modo de vinculación simple (simple bind):
ldapprefixCadena que se antepondrá al nombre de usuario al formar el DN con el que vincularse, cuando se realice la autenticación mediante vinculación simple.
ldapsuffixCadena que se añadirá al nombre de usuario al formar el DN con el que vincularse, cuando se realice la autenticación mediante vinculación simple.
Las siguientes opciones se utilizan únicamente en el modo search+bind:
ldapbasednDN raíz en el que comenzar la búsqueda del usuario, cuando se realiza la autenticación search+bind.
ldapbinddnDN del usuario con el que vincularse al directorio para realizar la búsqueda cuando se hace la autenticación search+bind.
ldapbindpasswdContraseña del usuario con el que vincularse al directorio para realizar la búsqueda cuando se hace la autenticación search+bind.
ldapsearchattribute
Atributo que debe coincidir con el nombre de usuario en la búsqueda cuando se realiza la autenticación
search+bind. Si no se especifica ningún atributo, se utilizará el atributo uid.
ldapsearchfilter
El filtro de búsqueda a utilizar al realizar la autenticación search+bind. Las apariciones de
$username se reemplazarán por el nombre de usuario. Esto permite filtros de búsqueda
más flexibles que ldapsearchattribute.
La siguiente opción puede utilizarse como forma alternativa de escribir algunas de las opciones LDAP anteriores en un formato más compacto y estándar:
ldapurlUna URL LDAP de la norma RFC 4516. El formato es:
ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]]
El scope debe ser uno de entre base, one o sub,
siendo normalmente este último. (El valor por defecto es base, que normalmente no es útil
en esta aplicación). El parámetro attribute puede designar un único atributo, en cuyo caso
se utiliza como valor para ldapsearchattribute. Si attribute está vacío,
entonces se puede utilizar filter como valor para ldapsearchfilter.
El esquema de URL ldaps elige el método LDAPS para realizar conexiones LDAP sobre SSL, equivalente
a utilizar ldapscheme=ldaps. Para utilizar conexiones LDAP cifradas empleando la operación
StartTLS, utiliza el esquema de URL normal ldap y especifica la opción
ldaptls además de ldapurl.
Para enlaces no anónimos, deben especificarse ldapbinddn y ldapbindpasswd
como opciones independientes.
Actualmente, las URL de LDAP solo son compatibles con OpenLDAP, no con Windows.
Es un error mezclar opciones de configuración para vinculación simple con opciones para search+bind. Para utilizar
ldapurl en el modo de vinculación simple, la URL no debe contener un basedn
ni elementos de consulta.
Cuando se utiliza el modo search+bind, la búsqueda se puede realizar utilizando un único atributo especificado con
ldapsearchattribute, o utilizando un filtro de búsqueda personalizado especificado con
ldapsearchfilter. Especificar ldapsearchattribute=foo equivale a especificar
ldapsearchfilter="(foo=$username)". Si no se especifica ninguna de las dos opciones, el valor por
defecto es ldapsearchattribute=uid.
Si PostgreSQL se compiló con OpenLDAP como biblioteca cliente
LDAP, se puede omitir el ajuste ldapserver. En ese caso, se busca una lista de nombres de host y
puertos a través de los registros DNS SRV de la norma RFC 2782. Se busca el nombre
_ldap._tcp.DOMAIN, donde DOMAIN se extrae de ldapbasedn.
Aquí tienes un ejemplo de una configuración LDAP de vinculación simple (simple-bind):
host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
Cuando se solicita una conexión al servidor de base de datos como usuario de base de datos someuser,
PostgreSQL intentará vincularse al servidor LDAP utilizando el DN cn=someuser, dc=example, dc=net y
la contraseña proporcionada por el cliente. Si esa conexión tiene éxito, se concede el acceso a la base de datos.
Aquí tienes otra configuración de vinculación simple que utiliza el esquema LDAPS y un número de puerto personalizado, escrita como una URL:
host ... ldap ldapurl="ldaps://ldap.example.net:49151" ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
Esto es ligeramente más compacto que especificar por separado ldapserver, ldapscheme
y ldapport.
Aquí tienes un ejemplo de configuración de search+bind:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid
Cuando se solicita una conexión al servidor de base de datos como usuario de base de datos someuser,
PostgreSQL intentará vincularse de forma anónima (ya que no se especificó ldapbinddn) al servidor
LDAP y realizará una búsqueda de (uid=someuser) bajo el DN base especificado. Si se encuentra una
entrada, intentará entonces vincularse utilizando la información encontrada y la contraseña suministrada por el cliente.
Si este segundo enlace tiene éxito, se concede el acceso a la base de datos.
Aquí tienes la misma configuración search+bind escrita como una URL:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
Otros programas de software que admiten la autenticación con LDAP utilizan el mismo formato de URL, por lo que resultará más fácil compartir la configuración.
Aquí tienes un ejemplo de una configuración search+bind que utiliza ldapsearchfilter en lugar de
ldapsearchattribute para permitir la autenticación mediante el ID de usuario o la dirección de correo electrónico:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"
Aquí tienes un ejemplo de una configuración search+bind que utiliza el descubrimiento DNS SRV para encontrar los nombres
de host y los puertos para el servicio LDAP para el nombre de dominio example.net:
host ... ldap ldapbasedn="dc=example,dc=net"
Dado que LDAP utiliza a menudo comas y espacios para separar las diferentes partes de un DN, a menudo es necesario utilizar valores de parámetros entre comillas dobles al configurar las opciones de LDAP, tal como se muestra en los ejemplos.