首页 > 解决方案 > 由于不正确的主机名(GSSAPI 身份验证),Kerberos LDAP 绑定失败

问题描述

我正在处理一个问题,即我连接到用户提供的 LDAP 服务器,但有时该服务器的主机名不可用。在给定的 n 时间,我要么拥有 IP 地址,要么拥有主机名。

能够从给定的主机名中获取 IP 地址,但我的 /etc/hosts 中没有可用的 DNS 映射,以便我从 IP 地址获取主机名

我找不到任何方法来避免在身份验证过程中使用主机名,而只是继续使用 IP 地址。想检查这是否可能?

我可以告诉 kerberos 跳过主机名并仅使用 IP 地址进行身份验证吗?

我尝试了https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html#domain-realm中提供的大多数选项,但没有任何帮助我跳过主机名检查。

context = LDAPConnectionPtr(new LDAPConnection(authSrv.getIP(), authSrv.getPort()));
context->saslInteractiveBind("GSSAPI", LDAP_SASL_INTERACTIVE, new Sasl());

以下是面临的错误

SASL/GSSAPI authentication started
Sasl::handleInteractions()
SASL Prompt: Please enter your authorization name
Caught LDAP Bind exception: Error -2: Local error

标签: ldapkerberossaslgssapi

解决方案


您不能将 IP 地址与 Kerberos 一起使用,它必须是主机名。此外,除非人类永久使用它,否则您不会在脚本中进行交互式绑定。使用非交互式绑定(因此您会看到错误)。

这在 Python 中完美运行:

url = 'ldap://ad.company.com'
directory = ldap.initialize(url)
directory.set_option(ldap.OPT_PROTOCOL_VERSION, ldap.VERSION3)

推荐阅读