来自 ActiveDirectory 的 ThumbnailPhoto 返回错误
ThumbnailPhoto from ActiveDirectory returned wrong
首先我想说明我不是 LDAP 专家。
我需要的是从我公司的ldap 中获取一些信息,包括用户照片。
我的问题是,在我获得所需的所有信息后,thumbnailPhoto
似乎以某种方式损坏。我举个例子:
\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\ufffd\u0000\u0000\u0000\u ...
我第一次注意到这一点是在我尝试将它应用到我的前端客户端时无法从返回的缓冲区中制作图像时。另外,当我在 LDAP 中查看时,返回的照片尺寸几乎翻了一番。
我检查了照片在 LDAP 中的保存方式是否有问题,复制粘贴到转换器中,一切正常。
我将提供一个代码片段,说明如何使用名为 activedirectory:
的库从 LDAP 获取信息
const ActiveDirectory = require('activedirectory');
exports = module.exports = () => {
return {
auth: (doc) => {
let user = 'project@ad.company.com',
passwd = 'password provided by IT team';
return new Promise((resolve, reject) => {
let ad = new ActiveDirectory({
url: 'ldap://something.ad.company.com:389',
baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
username: user,
password: passwd,
attributes: { user: [] }
});
ad.authenticate(doc.username, doc.password, (err, auth) => {
if(auth){
ad.findUser(doc.username, (err, user) => {
if(err){
reject(err);
} else {
resolve(user);
}
})
} else {
reject(err);
}
});
});
}
}
}
exports['@singleton'] = true;
我已经为此苦苦挣扎了一段时间,但我不明白发生了什么。我唯一知道的信息是 link,它告诉 "ldapjs does not know that the thumbnail is really binary" 但那是在 2013 年。
我将不胜感激一些帮助,或者至少我可以在带有 express 的节点中使用的任何其他方法或库。
目前应用程序使用:
"activedirectory": "^0.7.2",
"electrolyte": "0.3.0",
"express": "^4.16.3",
提前致谢。
再次查看 activedirectory 存储库上发布的所有问题后,我找到了我需要的答案。
const customeParser = function(entry, raw, callback){ if (raw.hasOwnProperty("thumbnailPhoto")){ entry.thumbnailPhoto = raw.thumbnailPhoto; } callback(entry) }
let ad = new ActiveDirectory({
url: 'ldap://something.ad.company.com:389',
baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
username: user,
password: passwd,
attributes: { user: [] },
entryParser: customeParser
});
在前端,如果您使用 Angular 4+:
this.domSanitizer.bypassSecurityTrustUrl('data:image/png;base64,'+ new Buffer(thumbnailPhoto).toString('base64'))
首先我想说明我不是 LDAP 专家。
我需要的是从我公司的ldap 中获取一些信息,包括用户照片。
我的问题是,在我获得所需的所有信息后,thumbnailPhoto
似乎以某种方式损坏。我举个例子:
\ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\ufffd\u0000\u0000\u0000\u ...
我第一次注意到这一点是在我尝试将它应用到我的前端客户端时无法从返回的缓冲区中制作图像时。另外,当我在 LDAP 中查看时,返回的照片尺寸几乎翻了一番。
我检查了照片在 LDAP 中的保存方式是否有问题,复制粘贴到转换器中,一切正常。
我将提供一个代码片段,说明如何使用名为 activedirectory:
的库从 LDAP 获取信息const ActiveDirectory = require('activedirectory');
exports = module.exports = () => {
return {
auth: (doc) => {
let user = 'project@ad.company.com',
passwd = 'password provided by IT team';
return new Promise((resolve, reject) => {
let ad = new ActiveDirectory({
url: 'ldap://something.ad.company.com:389',
baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
username: user,
password: passwd,
attributes: { user: [] }
});
ad.authenticate(doc.username, doc.password, (err, auth) => {
if(auth){
ad.findUser(doc.username, (err, user) => {
if(err){
reject(err);
} else {
resolve(user);
}
})
} else {
reject(err);
}
});
});
}
}
}
exports['@singleton'] = true;
我已经为此苦苦挣扎了一段时间,但我不明白发生了什么。我唯一知道的信息是 link,它告诉 "ldapjs does not know that the thumbnail is really binary" 但那是在 2013 年。
我将不胜感激一些帮助,或者至少我可以在带有 express 的节点中使用的任何其他方法或库。
目前应用程序使用:
"activedirectory": "^0.7.2",
"electrolyte": "0.3.0",
"express": "^4.16.3",
提前致谢。
再次查看 activedirectory 存储库上发布的所有问题后,我找到了我需要的答案。
const customeParser = function(entry, raw, callback){ if (raw.hasOwnProperty("thumbnailPhoto")){ entry.thumbnailPhoto = raw.thumbnailPhoto; } callback(entry) }
let ad = new ActiveDirectory({
url: 'ldap://something.ad.company.com:389',
baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
username: user,
password: passwd,
attributes: { user: [] },
entryParser: customeParser
});
在前端,如果您使用 Angular 4+:
this.domSanitizer.bypassSecurityTrustUrl('data:image/png;base64,'+ new Buffer(thumbnailPhoto).toString('base64'))