Node.js 无法使用passport ldapauth绑定AD admin

Node.js 无法使用passport ldapauth绑定AD admin,node.js,express,active-directory,passport.js,Node.js,Express,Active Directory,Passport.js,在尝试配置passport ldapauth和测试身份验证时,出现以下错误: lde_message: "000004DC: LdapErr: DSID-0C0907C2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580" 我想这是因为不允许匿名绑定,并且我已经向passport ldapauth的选项提供了管理员帐

在尝试配置passport ldapauth和测试身份验证时,出现以下错误:

lde_message: "000004DC: LdapErr: DSID-0C0907C2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580"
我想这是因为不允许匿名绑定,并且我已经向passport ldapauth的选项提供了管理员帐户凭据

/* /src/app.ts */

import * as express from "express";
import * as bodyParser from 'body-parser';
import * as session from 'express-session';
import * as helmet from 'helmet';
import * as path from 'path';
import * as uuid from 'uuid/v4';
import * as passport from 'passport';
import * as ldapAuthStrategy from 'passport-ldapauth'
const OPTS: ldapAuthStrategy.Options = {
  server: {
    url: process.env.AUTH_LDAP_URL,
    bindDN: process.env.AUTH_LDAP_BIND_USER_DN,
    bindCredentials: process.env.AUTH_LDAP_BIND_PASS,
    searchBase: "DC=example,DC=com,DC=us",
    searchFilter: "(sAMAccountName={{username}})"
  }
}
passport.use(new ldapAuthStrategy(OPTS));
我的环境文件看起来像这样

AUTH_LDAP_URL='ldap://X.X.X.X:389'
AUTH_LDAP_BIND_USER_DN='cn=Administrator,dc=example,dc=com,dc=us'
AUTH_LDAP_BIND_PASSWORD='PASSWORD'
在一个路由中,我请求进行身份验证,这是发出错误的地方

/* /src/routes/login/index.ts */
import * as express from 'express';
import * as passport from 'passport';
const Router = express.Router();

Router.get('/AD/', (req, res)=>{
  res.render('login/login', {req: req, title: 'Login'});
}).post('/AD/go',  (req: express.Request, res: express.Response, next: express.NextFunction): void | Response => {
  passport.authenticate('ldapauth', (err, user, info): void => {
    var error = err || info
    if (error){
      res.status(500).json({ status: 500, data: error })
    }else if (!user){
      res.status(401).json({ status: 404, data: "User Not Found" })
    }else{
      res.status(500).json({ status: 200, data: user })
    }
  })(req, res, next)
});

module.exports = Router;
在过去的7个小时里,我一直在阅读文档,并试图在网上找到一些例子来帮助解决这个问题。已修改某些值以编辑数据。提前谢谢

编辑: 如果我使用ldapsearch(同样是编辑过的),这是可行的


您的使用看起来是正确的,因此可能需要检查您的设置并验证一切是否正确

  • AUTH\u LDAP\u BIND\u USER\u DN
    是否正确?我知道您可能为这个问题更改了此选项,但您显示的DN将用户放在域的根目录下,情况可能并非如此。确保已从用户的
    distrignizedName
    属性中提取该值
  • 当然,请检查密码
  • 您的web服务器是否可以连接到LDAP服务器的389端口?测试的方式取决于服务器运行的操作系统。我经常从命令行使用telnet客户端:
    telnet X.X.X.389

核心问题是环境变量输入错误。
AUTH\u LDAP\u BIND\u PASS
应该是
AUTH\u LDAP\u BIND\u PASSWORD

这里有个窍门,我可以使用ldapsearch与管理员帐户绑定并搜索。而我正在开发的系统可以与该广告对话,没有任何问题。
ldapsearch -b "dc=example,dc=com,dc=us" -H ldap://X.X.X.X:389 -x -D "cn=Administrator,dc=example,dc=com,dc=us" -W '(sAMAccountName=testuser)'
...
# search result
search: 2
result: 0 Success