繁体   English   中英

使用技术用户的LDAP认证

[英]LDAP Authentication using a technical user

在我的组织中,我们要求为新应用程序实施LDAP身份验证。 我们面临的问题是用于连接到活动目录的CN与sAMAccountName不同。

sAMAccountName是组织为用户提供的用户名,而cn是lastName, firstName [Intern]

为了解决此问题,我们决定使用技术用户从sAMAccountName检索cn,然后尝试使用cn和密码对用户进行身份验证,代码如下所示:

InitialDirContext initialDirContext = new InitialDirContext(initUserAuthenticationInfo(technicalUserCredentilas.Username, technicalUserCredentilas.Password))
searchResult =initialDirContext.search(AuthenticationHelper.DEFAULT_SEARCH_BASE, "(&(sAMAccountName=" + username + "))", searchCriteria)
userCNFromAD = searchResult.hasMore() ? "CN=" + (searchResult.nextElement().getAttributes().get("cn").get())

问题是,每当用户尝试登录失败时,Active Directory就会将其视为技术用户尝试登录失败! 然后一段时间后,技术用户总是被锁定,我尝试使用initialDirContext.close()获得用户cn后关闭initialDirContext,但这没有任何改变。

Active Directory可以使用域和用户sAMAccountName或userPrincipalName值对用户进行身份验证。 如果您在单个林中只有一棵树,则在名为“ domain.ccTLD”(旧名称“ domain”)的域中的用户名“ sampleuser”可以通过“ domain \\ sampleuser”或“ sampleuser@domain.com”进行身份验证-无需弄清楚实际的专有名称。

但是对于您使用的流程,这就是我用于AD和纯LDAP服务器(OpenLDAP,Oracle Unified Directory等)的LDAP身份验证的方式:

  • 连接到LDAP服务器与服务帐户绑定
  • 使用“(&(sAMAccountName = ...))”过滤器搜索用户
  • 检索完全限定的DN(distinguishedName属性值或返回的对象DN)
  • 与LDAP服务器断开连接。
  • 连接到LDAP服务器
  • 与检索到的标准DN和用户提供的密码绑定
  • (可选:如果您也正在执行授权,请根据需要验证组成员身份)
  • 断开与LDAP服务器的连接

通过将系统帐户登录和搜索与用户登录和搜索分开,我从未见过系统帐户被错误锁定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM