Невозможно связать администратора AD с помощью passport-ldapauth - PullRequest
0 голосов
/ 16 января 2020

При попытке настроить 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));

Мой env-файл выглядит примерно так ...

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 (снова, отредактировано)

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

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Основная проблема заключалась в опечатках. AUTH_LDAP_BIND_PASS должно было быть AUTH_LDAP_BIND_PASSWORD

0 голосов
/ 16 января 2020

Ваше использование выглядит правильно, поэтому, возможно, go просмотрите ваши настройки и убедитесь, что все правильно.

  • Является ли AUTH_LDAP_BIND_USER_DN на самом деле правильным? Я знаю, что вы, вероятно, изменили это для вопроса, но показанное вами DN ставит пользователя в root домена, что, вероятно, не так. Убедитесь, что вы извлекли это значение из атрибута distinguishedName пользователя.
  • Конечно, проверьте пароль.
  • Может ли ваш веб-сервер подключиться к порту 389 сервера LDAP? Как вы тестируете, зависит от того, на какой ОС работает ваш сервер. Я часто буду использовать te lnet клиент из командной строки: telnet X.X.X.X 389
...