Azure 应用服务中的 LDAP 身份验证失败

Posted

技术标签:

【中文标题】Azure 应用服务中的 LDAP 身份验证失败【英文标题】:LDAP Authentication Fails in Azure App Service 【发布时间】:2019-06-22 10:13:26 【问题描述】:

我创建了一个 Java Web 应用并将其部署在 Azure 应用服务上。在应用程序中,我们为用户提供登录页面,并在提交凭据后使用 LDAP 对用户进行身份验证。 这在本地部署时有效

当我将它作为 WebApp 部署到 Azure 时,不会发生身份验证并且应用程序会出错。我正在尝试像下面这样进行身份验证。 LDAPContext 在 Azure 中始终返回为 null。

Azure 门户中的身份验证/授权设置已关闭。

    LdapContext ctx = null;
    String dn= "uid=" + username + ",ou=users,ou=xxxx,o=xxxxx";

    String ldapURL = "ldap://ldap.example.com:389";
    Hashtable<String, String> environment =new Hashtable<String, String>();
    environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    environment.put(Context.PROVIDER_URL, ldapURL);
    environment.put(Context.SECURITY_AUTHENTICATION, "simple");
    environment.put(Context.SECURITY_PRINCIPAL, dn);
    environment.put(Context.SECURITY_CREDENTIALS, password);
    ctx = new InitialLdapContext(environment,null);

【问题讨论】:

您在哪里部署了 LDAP 服务器?你使用了什么分布的 LDAP 服务器?我建议您可以使用Apache Directory Studio 尝试连接您的 LDAP 服务器并检查问题。更多详细信息,请更新您的帖子。 嗨彼得,我可以通过 Apache Studio 连接到 LDAP,如果我将它部署在任何 Web 应用程序服务器中,它也可以工作。只有当我将它部署到 Azure 时才会出现问题。 你有什么例外吗?请通过 Kudu 查看日志输出。 【参考方案1】: 服务器端:检查哪些 IP 地址可以访问 LDAP 的入站安全规则 如果您在代码中传递 LDAP 域名。尝试传递那个地方的空值 尝试将 Auth 类型设为 Basic 或 Negotiate 或 Anonymous 等。这些在 .Net 框架中的工作方式与尝试 Java 中的其他类型相同。所以尝试这样

ldap://ldap.example.com - 对于这个 example.com 是域名

【讨论】:

以上是关于Azure 应用服务中的 LDAP 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

通过 Tomcat 的 Spring Boot LDAP 身份验证(预身份验证)

Zeppelin - LDAP 身份验证失败

Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”

Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e

LDAP 身份验证失败:数据 52e

使用LDAP登录模块进行Teiid VDB数据虚拟化的身份验证失败