使用ldap进行身份验证,无需用户';密码

使用ldap进行身份验证,无需用户';密码,ldap,openldap,ldapjs,Ldap,Openldap,Ldapjs,我正在尝试使用ldap js创建登录身份验证。我设置了所有凭据,一切正常,但问题是我可以仅用用户的Uid(用户id又名用户名)绑定用户,它没有要求密码,我不知道如何修复此问题。它必须要求Uid和用户密码才能连接 我尝试使用相同的凭据(包括userPassword)连接到,但对我无效 ldapConfig.js 在这个文件中,我设置了所有ldap配置 'url': 'ldap://*************', 'port': '***', 'timeout': '', 'conn

我正在尝试使用ldap js创建登录身份验证。我设置了所有凭据,一切正常,但问题是我可以仅用用户的Uid(用户id又名用户名)绑定用户,它没有要求密码,我不知道如何修复此问题。它必须要求Uid和用户密码才能连接

我尝试使用相同的凭据(包括userPassword)连接到,但对我无效

ldapConfig.js 在这个文件中,我设置了所有ldap配置

  'url': 'ldap://*************',
  'port': '***',
  'timeout': '',
  'connectTimeout': '',
  'secret': '**********',
  'reconnect': true,
  'filtre': '(&(ObjectClass=*******)',
  'search_dn': 'ou=******,dc=****,dc=****',
  'domain': 'cn=******,dc=****,dc=****'
login.js 在这个文件中,我尝试连接到ldap服务器,它工作得很好,然后我想通过uid获取用户

const server = ldapConfig.url
const ldapDomain = ldapConfig.domain
const password = ldapConfig.secret
const searchDomain = ldapConfig.search_dn

  const client = ldap.createClient({
    url: server
  })
  client.bind(ldapDomain, password, err => {
    assert.ifError(err)
  })
 const opts = {
    scope: 'sub',
    filter: ldapConfig.filtre + `(mail=${request.body.mail}))`
  }
 client.search(searchDomain, opts, (err, res) => {
     assert.ifError(err)

     res.on('searchEntry', entry => {
      console.log(entry.object)
       }  )
我希望这是清楚的。谢谢

您的目录中可能启用了未经验证的绑定(当您提供用户ID和空密码时,这似乎是成功的绑定)。如果您使用的是OpenLDAP,如quesstion标签所示,请检查slapd.conf中的允许绑定\u anon\u cred

除非特别需要未经验证的绑定,否则我会在目录服务器上禁用它。在少数需要未经身份验证的绑定的情况下,所有针对目录进行身份验证的应用程序都需要在尝试绑定之前验证用户输入——也就是说,验证输入的用户名和密码值不为null