繁体   English   中英

如何使用JNDI在Java中强制执行LDAP bindRequest?

[英]How can I enforce a LDAP bindRequest in java using JNDI?

我有到LDAP服务器(在这种情况下为Active Directory)的JNDI连接。 我还使用ctx.extendedOperation( new StartTlsRequest() )获得安全连接。

在此连接上,我需要验证凭据。 我可以使用登录

ctx.addToEnvironment( Context.SECURITY_AUTHENTICATION, "simple" );
ctx.addToEnvironment( Context.SECURITY_PRINCIPAL, principal );
ctx.addToEnvironment( Context.SECURITY_CREDENTIALS, credentials );

但是,“ bindRequest”命令仅在对JNDI上下文执行的下一个操作上通过ldap发出。 但是,我对此无能为力。 我只需要检查凭据。 有什么方法可以强制执行“ bindRequest”吗?

否则,应该将动作用作自己的NOP吗? 搜索不存在的对象,还是应该查询某个存在或...的对象的某些属性? 它需要快速,不应在服务器端创建任何工作,并且应使用尽可能少的带宽。 (因为实际上从一开始就不应该采取必要的行动...)

问候,斯特芬

LdapContext.reconnect()执行LDAP绑定。

据我了解,一种解决方案是在目录中查找主体,并使用以下过滤器进行搜索:

(&(objectCategory=person)(sAMAccountName=principal))

如果主体的格式为:“ user1”

(&(objectCategory=person)(userPrincipalName=principal))

如果主体的格式为:“ user1@dom.fr”

对于NO-OP操作,您只需搜索根DSE即可 那应该在服务器的内存中。 如果您有权访问BIND请求和响应,则可以在BIND请求中包括授权身份请求控件。 如果服务器支持此请求控制(在这种情况下,它将在根DSE中列出),则服务器将在BIND响应中包括授权身份响应控制。 该响应控制将是连接的身份验证标识。

暂无
暂无

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

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