问题描述
当用户打开我的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 ntlm
或activedirectory
模块,但是阅读它们的文档对我没有好处。
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 (将#修改为@)