1

我首先要提一下,我不是 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;

我已经为此苦苦挣扎了一段时间,但我不明白会发生什么。我对此的唯一信息是在这个链接上,它告诉“ldapjs 不知道缩略图真的是二进制的”,但那是在 2013 年。

我会很感激一些帮助,或者至少我可以在 node 中使用 express 的任何其他方法或库。

目前该应用程序使用:

"activedirectory": "^0.7.2",

"electrolyte": "0.3.0",

"express": "^4.16.3",

提前致谢。

4

1 回答 1

2

在再次查看发布在 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'))
于 2018-04-30T11:44:10.993 回答