Аутентификация с помощью LDAP на node.js и экспресс-сервере - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь связать свой сервер node.js с сервером LDAP, используя passport-ldapauth. Дело в том, что почтовый запрос отправил мне «плохой запрос» на Почтальона, поэтому я вывел некоторый фрагмент кода, который принадлежит запросу, неправильно сформированным ...

var express = require('express');
var passport = require('passport');
var bodyParser = require('body-parser');
var LdapStrategy = require('passport-ldapauth');
var basicAuth = require('basic-auth');

var router = express.Router();
var app = express();

var fs = require('fs');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(passport.initialize());
app.use('/', router);

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.header('Access-Control-Allow-Methods', 'OPTIONS, GET, POST, PUT, DELETE');
  if('OPTIONS' == req.method){
    res.sendStatus(200);
  } else {
    console.log(`${req.ip} ${req.method} ${req.url}`);
    next();
  }
})

var OPTS = {
  server: {
    url: 'ldaps://...',
    bindDN: 'CN=...,OU=...,DC=...,DC=...,DC=...',
    bindCredentials: '...',
    searchBase: 'OU=...,DC=...,DC=...,DC=...',
    searchFilter: '(&(objectcategory=person)(objectclass=user)(|(samaccountname={{username}})(mail={{email}})))',
    tlsOptions: {
      ca: [
        fs.readFileSync('./server/fileNameOfTheCertificate')
      ]
    }
  },
  usernameField: 'username',
  passwordField: 'password',
  credentialsLookup: basicAuth
};

passport.use(new LdapStrategy(OPTS));

app.post('/authenticate', passport.authenticate('ldapauth', {session: false}), function(req, res) {
  res.send({status: 'ok'});
});


app.listen('4300', function(){
  console.log('Server now listening on 4300');
})
...