我正在使用activedirectory模块对AD用户进行身份验证。我对大多数用户都没有遇到问题,但是对于某个特定OU中的用户,身份验证经常失败。下面是我使用的代码
.env
ldap_url = "ldap://mydomain.local"
baseDN = "DC=mydomain, DC=local"
ad_bind_user = "bind-user@mydomain.local"
ad_bind_user_password = "Password Placeholder"
login.js
const express = require('express');
const ActiveDirectory = require('activedirectory');
const router = express.Router();
const config = {
url: process.env.ldap_url,
baseDN: process.env.baseDN,
username: process.env.ad_bind_user,
password: process.env.ad_bind_user_password
};
const ad = new ActiveDirectory(config);
router.post('/api/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
ad.authenticate(username, password, (error, auth) => {
if (error) {
return res.status(500).send(error);
}
if (auth) {
req.session.user = {
username: username,
authenticated: true
};
return res.json(req.session.user);
}
else {
return res.status(401).send('Unauthorized User');
}
});
});
对于特定Users OU以外的用户,我能够成功进行身份验证。但是,对于Users OU中的帐户,身份验证失败,并出现以下错误
{
"lde_message":"80090308: LdapErr: DSID-0C09044E, comment: AcceptSecurityContext error, data 52e, v2580",
"lde_dn": null
}
对于此OU中的用户,如果我为域提供了用户名,我就能够成功进行身份验证。e.当用户名是testuser时,它不工作,但当用户名是testuser@mydomain时。在本地,它工作正常。
我还创建了另一个路由来获取用户详细信息,并且对于任何参数i,输出都没有任何差异。两个OU中的用户具有完全相同的参数
下面是我用来获取用户详细信息的代码
router.get('/api/getusers', (req, res) => {
const username = req.body.username;
ad.findUser(username, (error, auth) => {
if (error) {
return res.status(500).send(error);
}
if (auth) {
return res.json(auth);
}
});
});
我似乎不明白为什么代码只期望域用于身份验证函数中的特定OU,而不需要域就可以成功地用findUser函数找到用户?我该怎么办?
1条答案
按热度按时间t3irkdon1#
我不能过去的原因,只有身份验证功能有问题查找用户没有域。所以我修改了login。js将域添加到username变量(不是最优雅的,但它很有效)。这是修改后的脚本。