javascript - 从 Active Directory 获取用户信息(组、全名)
问题描述
当用户打开我的 Web 应用程序 (JavaScript/React) 时,他们应该在页面上看到他们的全名(例如 Makarov Viktor (locadm))以及他们从 Active Directory 参与的组列表。Web 服务器和用户都在使用 Active Directory 的同一个企业本地域中。并且用户在打开应用程序时已登录 Active Directory(进入窗口时)。Web 服务器是 Node.js Express 应用程序(代码附在下面)。
不仅如此,我希望用户不要在应用程序中输入登录名和密码,以便它使用单点登录工作。
这是我的第一个 Web 应用程序和 Node.js 服务器应用程序。根据我目前所能找到的信息,我认为,在接受用户的第一个请求时,主要工作应该在服务器端完成。服务器必须识别用户并从 Active Directory 中获取他们的组和全名。然后,Web 应用程序应该以 JSON 对象的形式从服务器获取此信息,并将其显示给页面上的用户。实际上,最终的任务不仅仅是向用户列出组(这是为了简单起见)。我需要知道用户组以将它们作为过滤器包含在对 ElasticSearch 的 API 请求中。
不幸的是,到目前为止我找不到合适的指导。我的另一个猜测是我应该使用 NPMntlm
或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'", "https:", "'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)
})
解决方案
推荐阅读
- sql-server - “IF”之前的 SQL Server 代码中的未定义错误
- java - JVM 总内存通常为 64 MB,但有时只有 2 MB
- python - 我如何在 Windows 上安装 pycairo Im,这是我尝试通过 pip 安装时遇到的错误
- listview - SwiftUI - 列表导航在 iPhone 上不起作用
- ubuntu - 更换uImage时启动时出现问题
- automation - 如何在元素的xpath中编写关键字?
- reactjs - 如何在 React 功能组件中使用 props 模拟数据
- r - tlmgr_install:存储库中不存在包脚注
- mediawiki - 在维基共享资源中测试图片上传
- python - 模型导入和测试中的 Alembic 模式升级之间的 SQLAlchemy 元数据冲突