gpt4 book ai didi

java - 使用 JAAS LdapLoginModule 向 ActiveDirectory 进行身份验证时遇到 FailedLoginException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:02 24 4
gpt4 key购买 nike

我正在竭尽全力尝试让 LDAP 身份验证与 Active Directory 一起工作。

我们刚刚设置了一个 SharePoint Server 2010,我们认为最好还根据 Active Directory 对用户进行身份验证,因为它已经存在于 SharePoint 中。我们的环境是 Windows Server 2008 R2 Standard。

我有一个用户的用户名是 ahsieh@rdl.com.tw enter image description here

根据这个答案https://serverfault.com/a/130556我的提供商 URL 应该是 ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw(注意不要使用 vm-sps 的主机名。 rdl.com.tw,我选择使用 IP 地址,因为我没有时间为所述服务器配置 DNS 条目)

为了确定,我在服务器上运行了 dsquery 命令:enter image description here

但是,我就是无法进行身份验证工作。我已经根据 LdapLoginModule API 尝试了所有三种类型的 JAAS 配置

以下是我遇到的错误:

<强>1。搜索优先模式:

注意:我没有指定 authzIdentity,因为我在 AD 上没有那个设置

JAAS 配置:

AESLogin_AD1 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw"
userFilter="(&(uid={USERNAME})(objectClass=User))"
useSSL=false
debug=true;
};

结果:

        [LdapLoginModule] search-first mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] searching for entry belonging to user: ahsieh@rdl.com.tw
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot find user's LDAP entry

<强>2。认证优先模式

JAAS 配置:

AESLogin_AD2 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap:///CN=Users,DC=rdl,DC=com,DC=tw"
authIdentity="{USERNAME}"
userFilter="(&(|(samAccountName={USERNAME})(userPrincipalName={USERNAME})(cn={USERNAME}))(objectClass=user))"
useSSL=false
debug=true;
};

结果:

        [LdapLoginModule] authentication-first mode; SSL disabled
[LdapLoginModule] user provider: ldap:///CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] attempting to authenticate user: ahsieh@rdl.com.tw
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot bind to LDAP server

<强>3。仅身份验证模式

注意:我没有指定 authzIdentity,因为我在 AD 上没有那个设置

JAAS 配置:

AESLogin_AD3 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389"
authIdentity="CN={USERNAME},CN=Users,DC=rdl,DC=com,DC=tw"
useSSL=false
debug=true;
};

结果:

        [LdapLoginModule] authentication-only mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389
[LdapLoginModule] attempting to authenticate user: ahsieh@rdl.com.tw
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot bind to LDAP server

我还根据我在互联网上遇到的一些示例尝试了另一种配置:

<强>4。来自其他示例的配置

JAAS 配置:

AESLogin_AD4 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw"
authIdentity="{USERNAME}"
useSSL=false
debug=true;
};

结果:

        [LdapLoginModule] authentication-only mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] attempting to authenticate user: ahsieh@rdl.com.tw
[LdapLoginModule] cannot create LdapPrincipal: bad DN
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot create LdapPrincipal

注意:我的第四次试验似乎取得了微小的进展,因为至少 LDAP 绑定(bind)似乎有效,但现在问题似乎是cannot create LdapPrincipal: bad DN

我已经进入了 LdapLoginModule 的源代码并通过匹配调试消息,似乎这是由(从第 837 行开始)引起的:

try {

ldapPrincipal = new LdapPrincipal(dn);

} catch (InvalidNameException e) {
if (debug) {
System.out.println("\t\t[LdapLoginModule] " +
"cannot create LdapPrincipal: bad DN");
}
throw (LoginException)
new FailedLoginException("Cannot create LdapPrincipal")
.initCause(e);
}

并且基于LdapPrincipal API , InvalidNameException 被抛出如果检测到语法违规,但我不知道语法违规在哪里。

我也不知道如何调试它。

任何帮助将不胜感激!谢谢!

最佳答案

我在网上看了很多文章,最后从 Bonitasoft 的问答中找到了解决方案 JAAS config for Active Directory LDAP

JAAS 配置:

AESLogin_ADx {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw"
authIdentity="{USERNAME}@rdl.com.tw"
userFilter="(&(|(samAccountName={USERNAME})(userPrincipalName={USERNAME})(cn={USERNAME}))(objectClass=user))"
useSSL=false
debug=true;
};

结果:

[LdapLoginModule] authentication-first mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] attempting to authenticate user: ahsieh
[LdapLoginModule] searching for entry belonging to user: ahsieh
[LdapLoginModule] found entry: CN=Arthur Hsieh,CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] authentication succeeded
[LdapLoginModule] added LdapPrincipal "CN=Arthur Hsieh,CN=Users,DC=rdl,DC=com,DC=tw" to Subject
[LdapLoginModule] added UserPrincipal "ahsieh" to Subject

关于java - 使用 JAAS LdapLoginModule 向 ActiveDirectory 进行身份验证时遇到 FailedLoginException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36548510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com