Как авторизовать пользователей Windows AD с помощью node.js? - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно авторизовать пользователей Windows AD в последнее время.Сценарий ниже

  • Веб-страницы работают на сервере A (Vue + vue-router)
  • Интерфейс API работает на сервере B (узел + экспресс)
  • Пользовательвведите имя пользователя AD & pwd на веб-страницах (сервер A)
  • , передайте имя пользователя & pwd в интерфейс api на сервере B для аутентификации
  • имя пользователя сервера B и pwd через LDAP (windwos AD)
  • api на сервере B возвращает обратную связь веб-страницам (сервер A)

Итак, можно ли реализовать какое-либо решение на сервере B для аутентификации имени пользователя и pwd через LDAP?

Отлично, спасибо!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я нашел решение.обратитесь к: Узел JS LDAP Auth User

var ldap = require('ldapjs');
var client = ldap.createClient({
  url: 'ldap://ldapserver:port/',
  timeout: 5000,
  connectTimeout: 10000
});
var opts = {
  filter: '(&(cn=*))',
  scope: 'sub',
  // This attribute list is what broke your solution
  attributes:['SamAccountName','dn']
};
console.log('--- going to try to connect user ---');
try {
   client.bind(username, password, function (error) { //first need to bind
        if(error){
            console.log(error.message);
              client.unbind(function(error) {if(error){console.log  (error.message);} else{console.log('client disconnected');}});
    } else {
        console.log('connected');
        client.search('ou=users, ou=compton, dc=batman, dc=com', opts, function(error, search) {
            console.log('Searching.....');

            search.on('searchEntry', function(entry) {
                if(entry.object){
                    console.log('entry: %j ' + JSON.stringify(entry.object));
                }
                client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}});
            });

            search.on('error', function(error) {
                console.error('error: ' + error.message);
                client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}});
            });

    }
});
} catch(error){
   console.log(error);
   client.unbind(function(error) {if(error){console.log(error.message);}       else{console.log('client disconnected');}});
}

запомните, если вы получаете сообщение об ошибке error ~~~: Size Limit Exceeded, используйте параметр paged и sizeLimit.

var opts = {
 filter: '(objectclass=commonobject)',
 scope: 'sub',
 paged: true,
 sizeLimit: 200
};
0 голосов
/ 30 мая 2018

Я использовал nodesspi https://github.com/abbr/nodesspi.

Но это только для Windows Env.И кажется, что вы можете получить результаты через браузер только для непосредственного посещения сервера B.Не передавая param для вызова api на сервере B.

В любом случае, это хороший сценарий для меня.

...