2 Star 0 Fork 0

Authi.ng / authing-ldap

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ldap.js 3.58 KB
一键复制 编辑 原始数据 按行查看 历史
const ldap = require('ldapjs');
const util = require('util');
const configs = require('./configs.json');
const yapi = {
WEBCONFIG: configs,
};
exports.ldapQuery = (username, password) => {
// const deferred = Q.defer();
return new Promise((resolve, reject) => {
const { ldapLogin } = yapi.WEBCONFIG;
// 使用ldapjs库创建一个LDAP客户端
const client = ldap.createClient({
url: ldapLogin.server
});
client.once('error', err => {
if (err) {
let msg = {
type: false,
message: `once: ${err}`
};
reject(msg);
}
});
// 注册事件处理函数
const ldapSearch = (err, search) => {
const users = [];
if (err) {
let msg = {
type: false,
message: `ldapSearch: ${err}`
};
reject(msg);
}
// 查询结果事件响应
search.on('searchEntry', entry => {
if (entry) {
// 获取查询对象
users.push(entry.object);
}
});
// 查询错误事件
search.on('error', e => {
if (e) {
let msg = {
type: false,
message: `searchErr: ${e}`
};
reject(msg);
}
});
search.on('searchReference', referral => {
// if (referral) {
// let msg = {
// type: false,
// message: `searchReference: ${referral}`
// };
// reject(msg);
// }
console.log('referral: ' + referral.uris.join());
});
// 查询结束
search.on('end', () => {
if (users.length > 0) {
client.bind(users[0].dn, password, e => {
if (e) {
let msg = {
type: false,
message: `用户名或密码不正确: ${e}`
};
reject(msg);
} else {
let msg = {
type: true,
message: `验证成功`,
info: users[0]
};
resolve(msg);
}
client.unbind();
});
} else {
let msg = {
type: false,
message: `用户名不存在`
};
reject(msg);
client.unbind();
}
});
};
// 将client绑定LDAP Server
// 第一个参数: 是用户,必须是从根结点到用户节点的全路径
// 第二个参数: 用户密码
return new Promise((resolve, reject) => {
if (ldapLogin.bindPassword) {
client.bind(ldapLogin.baseDn, ldapLogin.bindPassword, err => {
if (err) {
let msg = {
type: false,
message: `LDAP server绑定失败: ${err}`
};
reject(msg);
}
resolve();
});
} else {
resolve();
}
}).then(() => {
const searchDn = ldapLogin.searchDn;
const searchStandard = ldapLogin.searchStandard;
// 处理可以自定义filter
let customFilter;
if (/^&/gi.test(searchStandard)) {
customFilter = util.format(searchStandard, username);
} else {
customFilter = `${searchStandard}=${username}`;
}
const opts = {
// filter: `(${searchStandard}=${username})`,
filter: `(${customFilter})`,
scope: 'sub'
};
// 开始查询
// 第一个参数: 查询基础路径,代表在查询用户信息将在这个路径下进行,该路径由根结点开始
// 第二个参数: 查询选项
client.search(searchDn, opts, ldapSearch);
});
});
};
1
https://gitee.com/Authi_ng/authing-ldap.git
git@gitee.com:Authi_ng/authing-ldap.git
Authi_ng
authing-ldap
authing-ldap
master

搜索帮助