使用没有用户密码的 ldap 身份验证

Authentification with ldap without user's password

我正在尝试使用 ldap js 创建登录身份验证。我设置了所有凭据并且一切正常,但问题是我可以只用他的 Uid(用户 ID 又名用户名)绑定用户,它不要求输入密码,我不知道如何解决这个问题必须要求 Uid 和 userPAssword 才能连接

我尝试使用包括 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,如问题标签所示,请检查 slapd.conf 是否 allow bind_anon_cred

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