从Active Directory获取用户信息组,全名

问题描述

用户打开我的Web应用程序(JavaScript / React)时,他们应该在页面上看到其全名(例如Makarov Viktor(locadm))以及他们从Active Directory参与的组的列表。 Web服务器和用户都在使用Active Directory的同一公司内部域中。并且在打开应用程序时,用户将在Active Directory中登录(输入Windows时)。 Web服务器是Node.js Express应用程序(下面附有代码)。

除此之外,我还希望用户不要输入该应用程序的登录名和密码,以便它可以使用“单一登录”来工作。

这是我的第一个Web应用程序和Node.js服务器应用程序。根据到目前为止我可以找到的信息,当接受用户的第一个请求时,主要工作应该在服务器端完成。服务器必须识别用户并从Active Directory中获取其组和全名。然后,Web应用程序应仅以JSON对象的形式从服务器获取此信息,并在页面上将其显示用户。实际上,最终的任务不只是向用户列出组(这是为了简单起见)。我需要知道用户的组以将它们包含在对ElasticSearch的API请求中作为过滤器。

不幸的是,到目前为止,我找不到合适的指导。我的另一个猜测是,我应该使用NPM ntlmactivedirectory模块,但是阅读它们的文档对我没有好处。

const express = require('express'); // импортируем модуль express
//const http = require('http');
const https = require( 'https' );  // для организации https
const compression = require('compression');
const helmet = require('helmet');
const fs = require( 'fs' );   // для чтения ключевых файлов
const morgan = require('morgan'); // для логированиз апросов и ошибок
const vhost = require('vhost'); // для переадресации с имени search.aorti.ru
const path = require('path');
const rfs = require('rotating-file-stream'); // version 2.x
const ntlm = require('express-ntlm');


//задаем путь к https сертификату и ключу
httpsOptions = {
    key: fs.readFileSync("D:\\RTISearch\\Node_https_server\\cert\\sr-rti-sql-12.key"),// путь к ключу
    cert: fs.readFileSync("D:\\RTISearch\\Node_https_server\\cert\\sr-rti-sql-12.crt") // путь к сертификату
}

//задаем hostname  и порт
const hostname = 'hostname.ru';
const port = 443;
const message = `Сервер работает по адресу https://${hostname}:${port}`;

//задаем путь к каталогу с продуктовой версией веб приложения 
const filesDir = 'D:/RTISearch/search_react_app/build'

//Задаем настройки файла для логирования
var accessLogStream = rfs.createStream('access.log',{
  interval: '1M',// rotate monthly
  path: path.join(__dirname,'logs')
});

//создаем новый инстанс приложения экспресс
const app = express();

//используется для сжатие файлов,отдаваемых с сервера
app.use(compression());
//app.use(ntlm());

//Настраивам с помощью Helmet Content Security Policy
app.use(
  helmet.contentSecurityPolicy({
    directives: {
        defaultSrc: ["'self'"],baseUri:["'self'"],fontSrc: ["'self'","https:"," data:"],frameAncestors: ["'self'"],imgSrc: ["'self'","data:"],scriptSrcAttr: ["'none'"],styleSrc: ["'self'","'unsafe-inline'"],connectSrc: ["'self'","https://sr-rti-sql-12.aorti.ru:9200/rti_search_file_folder/_msearch","search.aorti.ru"],scriptSrc: ["'self'"],objectSrc: ["'none'"],upgradeInsecureRequests: [],blockAllMixedContent: []
      },})
);
app.disable('x-powered-by');

//Настраиваем логирование входящих запросов с помощью Morgan
app.use(morgan(':remote-addr - :remote-user - [:date[iso]] - :method - :status - :response-time ms - :total-time[2] - :url - :res[content-length] - :url - :user-agent',{ stream: accessLogStream }));

//создаем https сервер
const server = https.createServer(httpsOptions,app);

//подключаем папку с веб приложением
app.use(express.static(filesDir));

app.use((req,res,next)=>{

res.statusCode = 200;
res.setHeader('Content-Type','text/html; charset=utf-8');
res.end('<html><body><h1>Cервер Экспресс работает</h1></body></html>')
});

server.listen(port,() => {
    console.log(message)
    console.log("NODE_ENV = ",process.env.NODE_ENV)
})

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)