Идея авторизации следующая: если пользователь заходит из корпоративной сети, то берётся его ip-адрес, на основе которого определяется имя компьютера. По имени компьютера делается поиск в active directory, из результата берётся пользователь.
Как прикрутить эту схему к phpbb? Если зашедший пользователь ещё не существует, его надо сразу создать. Никаких лишних вопросов пользователю задаваться не должно. Другие способы авторизации пока не рассматриваются.
Вот соответствующий код определения пользователя на node.js:
const LdapAuth = require('ldapauth-fork');
const dns = require('dns');
const http = require('http');
function findUsers(wkstname, callback) {
ldap = new LdapAuth({
url: "LDAP://smth.city.example.com",
bindDn: "CN=Auto User,OU=Auto Users,OU=Service,DC=city,DC=example,DC=com",
bindCredentials: "JustAPassword",
searchBase: "OU=UsersCity,DC=city,DC=example,DC=com",
//searchFilter: "(mail={{username}})"
searchFilter: "(WKSTName={{wkstname}})"
});
var searchFilter = `(WKSTName=${wkstname})`;
var opts = {filter: searchFilter, scope: ldap.opts.searchScope};
ldap._search(ldap.opts.searchBase, opts, function (err, result) {
if (err) {
ldap.close();
return callback(err);
}
var users = result.map(u => ({login: u.cn, info: u.title}));
ldap.close();
return callback(null, users);
});
};
function getUserByIp(ip, callback) {
dns.reverse(ip, function(err, domains) {
if (err) {
return callback(err, null);
}
if(domains.length) {
findUsers(domains[0].match(/^\w+/)[0], (err, users) => {
if (err) {
return callback(err, null);
}
if (users.length !== 1) {
return callback(users, null);
}
return callback(null, users[0]);
});
}
return callback("No domains", null);
});
}
var server = http.createServer(function (request, response) {
var ip = request.connection.remoteAddress;
getUserByIp(ip, (err, user) => {
if (err) {
console.log(err);
}
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello, " + (user ? user.login : "guest") + "!");
});
});
server.listen(8081, '0.0.0.0');
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости